我正在尝试使用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"
]
}
也许我在序列化时没有使用正确的配置。有人有什么建议吗?
答案 0 :(得分: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>(); }
}
答案 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
方法只是迭代您的对象并序列化字符串列表。