使用Json.NET序列化子类

时间:2012-07-06 18:33:27

标签: c# json json.net

我正在尝试使用Json.NET来序列化一个子类。生成的json包含超类的序列化属性,但子类对象的属性。

这似乎与我发现here on SO的问题有关。但是必须写一个JsonConverter似乎有点矫枉过正。

示例子类:

public class MySubclass : List<string>
{
    public string Name { get; set; }
}

序列化示例:

MySubclass myType = new MySubclass() { Name = "Awesome Subclass" };
myType.Add("I am an item in the list");

string json = JsonConvert.SerializeObject(myType, Newtonsoft.Json.Formatting.Indented);

结果json:

[
  "I am an item in the list"
]

我希望结果更像这样:

{
    "Name": "Awesome Subclass",
    "Items": [
        "I am an item in the list"
    ]
}

也许我在序列化时没有使用正确的配置。有人有什么建议吗?

2 个答案:

答案 0 :(得分:5)

根据documentation

  

.NET列表(从IEnumerable继承的类型)和.NET数组   转换为JSON数组。因为JSON数组只支持一系列   值而不是属性,任何其他属性和字段   在.NET集合上声明未序列化

所以,不要继承List<T>,只需添加第二个属性。

public class MyClass 
{
    public List<string> Items { get; set; }
    public string Name { get; set; }

    public MyClass() { Items = new List<string>(); }
}

答案 1 :(得分:2)

以下是我对此的看法。我认为你的预期结果会更像这样的类:

public class MyClass 
{
    public string Name { get; set; }
    public List<string> Items { get; set; }
}

我不希望在Items的序列化结果中看到MySubclass : List<string>元素,因为List上和MySubclass上没有Items属性。

由于您的类MySubclass实际上是一个字符串列表,我猜(我只是在猜测)SerializeObject方法只是迭代您的对象并序列化字符串列表。