Десериализация JSON.Net VB не работает

Я новичок в VB и пытаюсь написать веб-сервис, который экспортирует и импортирует JSON.

Я использую JSON.NET 3.5 и могу нормально сериализовать:

Мой класс токена:

<DataContract()> _
  Public Class Token
    <DataMember()> _
    Public TokenID As String

    <DataMember()> _
    Public Issued As Date

    <DataMember()> _
    Public Expires As Date

    <DataMember()> _
    Public UserName As String

    <DataMember()> _
    Public CompanyID As String

    <DataMember()> _
    Public ApplicationID As Double

    <DataMember()> _
    Public UserID As Double

    <DataMember()> _
    Public DeviceID As Double

    <DataMember()> _
    Public DeviceSerialNumber As String

    <DataMember()> _
    Public IsValid As Boolean

    <DataMember()> _
    Public DebugText As String

(Я начал с сериализации MS, но решил попробовать JSON.NET)

Я сериализую с помощью:

Dim ThisToken as New Token ThisToken.DebugText = "blah" и так далее

    JSONString = Newtonsoft.Json.JsonConvert.SerializeObject(ThisToken)

И я получаю этот вывод от веб-сервиса:

{"TokenID":"9eaae348-5cbd-46ac-8ba9-83720ac07740","Выпущено":"/Дата(1300422761886+0800)/","Срок действия":"/Дата(1300465961886+0800)/","Имя пользователя" :"1234","CompanyID":"6","ApplicationID":1.0,"UserID":29.0,"DeviceID":1.0,"DeviceSerialNumber":"9149520800758","IsValid":true,"DebugText":" "}

Пока все хорошо, я думаю.

Чтобы проверить, работает ли десериализация, я решил попробовать десериализовать то, что я только что сериализовал. Итак, я создаю веб-сервис, который принимает строку, и вставляю в нее приведенное выше.

код для десерализации:

    Dim ThisToken As New Token

    ThisToken = Newtonsoft.Json.JsonConvert.DeserializeObject(JSonString)

Когда я запускаю код с помощью внутреннего тестирования отладки/IE VS2005, я получаю внутреннюю ошибку сервера http500.

У меня также возникает та же проблема, если я пытаюсь десериализовать сразу после сериализации.

Я думаю, что часть проблемы заключается в том, что код, которым я следовал, был c#; со страницы json.net:

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

Я вижу, что в С# есть часть <Product>, которая не всегда очевидна в vb?

Я не сомневаюсь, что продукт newtonsoft json.net отлично работает; Я уверен, что делаю что-то не так.

Помощь ?

Андрей


person andrew    schedule 18.03.2011    source источник


Ответы (1)


Эквивалент VB

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

is

Dim deserializedProduct as Product = JsonConvert.DeserializeObject(Of Product)(Json)

Так что я думаю, ты хочешь

Dim ThisToken as Token = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Token)(JSonString)
person Jon    schedule 18.03.2011
comment
Мне нужно зарегистрироваться и войти в систему, и, надеюсь, я смогу проголосовать и отметить как завершенную вещь.. Эндрю - person andrew; 18.03.2011
comment
Что делать, если у меня нет класса/типа для десериализации? Как у меня есть этот оператор в С#, dynamic deserializedProduct = JsonConvert.DeserializeObject(json); Что было бы эквивалентно этому на VB.NET? см. вопрос stackoverflow.com/questions/13890267/ - person mark vanzuela; 15.12.2012
comment
Я думаю, что в vb.net вам нужно создать класс для десериализации. В противном случае переключитесь на .NET 4 - person Pradip Kharbuja; 22.02.2013