JSON.Net VB десериализации не работает - PullRequest
5 голосов
/ 18 марта 2011

Я новичок в 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 как новый токен ThisToken.DebugText = "бла" и так далее

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

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

{ "TokenID": "9eaae348-5cbd-46ac-8ba9-83720ac07740", "Выдано": "/ Date (1300422761886 + 0800) /", "Expires": "/ Date (1300465961886 + 0800) /", "имя_пользователя": "1234", "CompanyID": "6", "ApplicationID": 1,0, "Идентификатор_пользователя": 29,0, "ID устройства": 1.0, "DeviceSerialNumber": "9149520800758", "IsValid": правда, "DebugText ":" "}

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

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

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

    Dim ThisToken As New Token

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

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

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

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

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

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

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

Помощь?

Andrew

1 Ответ

8 голосов
/ 18 марта 2011

VB эквивалентно

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

равно

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

Так что я думаю, что вы хотите

Dim ThisToken as Token = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Token)(JSonString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...