2010-06-04 9 views
6

Estoy intentando llenar un objeto C# (ImportedProductCodesContainer) con datos utilizando la deserialización JSON.NET.JSON.NET Deserialización en C# resultados en el objeto vacío

ImportedProductCodesContainer.cs:

using Newtonsoft.Json; 

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainer 
{ 
    public ImportedProductCodesContainer() 
    { 

    } 

    [JsonProperty] 
    public ActionType Action { get; set; } 

    [JsonProperty] 
    public string ProductListRaw { get; set; } 


    public enum ActionType {Append=1, Replace}; 
} 

JSON de cadena:

{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}} 

C# Código:

var serializer = new JsonSerializer(); 
var importedProductCodesContainer = 
    JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument); 

El problema es que importedProductCodesContainer permanece vacía después de ejecutar el código anterior (Acción = 0, ProductListRaw = nulo). ¿Puedes ayudarme a descubrir qué sucede?

Respuesta

1

Tiene demasiados niveles de ImportedProductCodesContainer. Está creando un nuevo objeto ImportedProductCodesContainer (del deserializador con plantilla) y luego intenta establecer una propiedad llamada ImportedProductCodesContainer (desde el nivel superior de su JSON) que sería una estructura que contiene los otros dos valores. Si deserializar la parte interna única

{"ProductListRaw":"1 23","Action":"Append"} 

entonces usted debe conseguir el objeto que está esperando, o bien crear una nueva estructura con una propiedad ImportedProductCodesContainer

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainerWrapper 
{ 
    [JsonProperty] 
    public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; } 
} 

y la plantilla de su deserializer con que entonces su JSON original debería funcionar.

También es posible cambiar este comportamiento utilizando otros atributos/indicadores con esa biblioteca JSON, pero no lo sé lo suficientemente bien como para decirlo.

+0

¡Gracias, eso funcionó! –

Cuestiones relacionadas