8

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

这似乎与我在 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"
    ]
}

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

4

2 回答 2

5

根据文档

.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>(); }
}
于 2012-07-06T18:50:29.600 回答
2

以下是我对此的看法。我认为您的预期结果会与这样的课程更加一致:

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

我不希望Items在序列化结果中看到一个元素,因为 on和 onMySubclass : List<string>都没有 Items 属性。ListMySubclass

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

于 2012-07-06T18:49:59.057 回答