2011-03-18 33 views
5

Soy nuevo en VB e intento escribir un servicio web que exporte e importe JSON.JSON.Net VB deserialize no funciona

estoy usando JSON.NET 3.5 y puede serializar bien:

Mi clase de emergencia es:

<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 

(I comenzó con la serialización de la EM, pero que me gustaría probar JSON.NET)

me serializar con:

Dim ThisToken como Nueva simbólico ThisToken.DebugText = "bla" y así sucesivamente

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

y me da esta salida desde el servicio web:

{ "TokenID": "9eaae348-5cbd-46ac-8ba9-83720ac07740", "emisión": "/ Fecha (1300422761886 + 0800)/"," Caduca ":"/Fecha (1300465961886 + 0800)/"," Nombre de usuario ":" 1234 "," CompanyID ":" 6 "," ApplicationID ": 1.0," UserID ": 29.0," DeviceID ": 1.0 , "DeviceSerialNumber": "9149520800758", "IsValid": true, "DebugText": ""}

Hasta ahora todo bien, creo.

Para probar que la deserialización funciona, pensé en probar y deserializar lo que acabo de serializar. Entonces creo un servicio web que acepta una cadena y pego lo anterior en ella.

código para deseralise es:

Dim ThisToken As New Token 

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

Cuando ejecuto el código usando VS2005 depuración pruebas internas/IE, me sale un error interno del servidor http500.

También me sale el mismo problema si intento deserializar inmediatamente después de la serialización.

Creo que parte del problema es que el código que estaba siguiendo era C#; desde la página json.net:

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

Veo que en C# hay una parte <Product> que no es fácilmente Apparant en VB?

No tengo dudas de que el producto newtonsoft json.net funciona bien; Estoy seguro de que no estoy haciendo algo bien.

¿Ayuda?

Andrew

Respuesta

8

La VB equivalente a

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

es

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

Así que creo que quieres

Dim ThisToken as Token = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Token)(JSonString) 
+0

Gracias montones; eso funciona. – andrew

+0

Voy a necesitar registrarme y acceder y con suerte puedo votar y marcar como completo. Andrew – andrew

+0

¿Qué pasa si no tengo una clase/tipo para deserializar?Al igual que tengo esta afirmación en C#, dynamic deserializedProduct = JsonConvert.DeserializeObject (json); ¿Cuál sería el equivalente de esto en VB.NET? ver pregunta http://stackoverflow.com/questions/13890267/vb-net-deserialize-json-to-anonymous-object-using-newtonsoft-returned-error –

Cuestiones relacionadas