2010-06-04 121 views
6

我想用JSON.NET反序列化填充数据的C#对象(ImportedProductCodesContainer)。在C#中的JSON.NET反序列化导致空对象

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字符串:

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

C#代码:

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

的问题是,importedProductCodesContainer保持运行上面的代码后空( Action = 0,ProductListRaw =空值)。你能帮我弄清楚有什么问题吗?

回答

1

你有一个太多的ImportedProductCodesContainer的水平。它会创建一个新的ImportedProductCodesContainer对象(来自模板化解串器),然后试图在其上设置一个名为ImportedProductCodesContainer(来自JSON顶层)的属性,该属性将是包含其他两个值的结构。如果反序列化内部唯一

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

那么你应该得到你期待的对象,也可以创建一个新的结构与ImportedProductCodesContainer财产

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

,并与模板,然后你解串器你原来的JSON应该可以工作。

也可以使用该JSON库中的其他属性/标志更改此行为,但我不太清楚。

+0

谢谢,这工作! – 2010-06-04 09:20:45