0

我有这些实体:

public class Product
{
    public string Code {get;set;}
    public string Name {get;set;}

    public ICollection<Pack> Packs {get;set;}
}

public class Pack
{
    public string Colour {get;set;}
    public string Moq {get;set;}
}

我的 json 对象:

var products = [{
    code: 1243123,
    name: "Gel",
    packs: [{
        color: "blue",
        moq: 10
    }]
}];

注意命名差异,即颜色的大小写和美式拼写。会JavaScriptConvert.DeserializeObject()正确反序列化吗?

还是我必须以另一种方式来做?

如果我可以有一个对象,我可以直接访问这些名称并且有很棒的值!

4

2 回答 2

2

如果您使用JSON.NET 之类的东西,那么您可以使用属性来控制序列化,例如:

public class Pack
{
    [JsonProperty("color")]
    public string Colour {get;set;}
    [JsonProperty("moq")]
    public string Moq {get;set;}
}

另外,鉴于您的预期输出,Product我认为您的课程应该如下所示:

public class Product
{
    [JsonProperty("code")]
    public long Code {get;set;}
    [JsonProperty("name")]
    public string Name {get;set;}
    [JsonProperty("packs")]
    public Pack[] Packs {get;set;}
}

注意代码包装类型。

于 2013-09-16T10:09:33.220 回答
1

如果你DataContractJsonSerializer改用,你可以把属性放到你的属性中,在生成/解析的 JSON 中给它们不同的名称:

[DataContract]
public class Pack
{
    [DataMember(Name = "color")]
    public string Colour {get;set;}

    [DataMember(Name = "moq")]
    public string Moq {get;set;}
}
于 2013-09-16T10:09:30.557 回答