考虑以下计划:(.NET Fiddle Link)
public class Program
{
public static void Main()
{
var carsa = new ListOfCarsA();
carsa.Cars.Add("Toyota");
carsa.Cars.Add("Lexus");
Console.WriteLine(JsonConvert.SerializeObject(carsa, Formatting.Indented));
var carsb = new ListOfCarsB();
carsb.Add("Nissan");
carsb.Add("Infiniti");
Console.WriteLine(JsonConvert.SerializeObject(carsb, Formatting.Indented));
}
}
public class ListOfCarsA
{
public string CollectionName { get { return "CarsA"; } }
public List<string> Cars { get; set; }
public ListOfCarsA()
{
Cars = new List<string>();
}
}
public class ListOfCarsB : List<string>
{
public string CollectionName { get { return "CarsB"; } }
}
然后输出以下内容:
{ “CollectionName”:“CarsA”, “汽车”: [ “丰田”, “雷克萨斯” ] }
并且
[ “日产”, “英菲尼迪” ]
为什么属性CollectionName
未被序列化并输出CarsB
,但ListOfCarsA
上的相同属性导致CarsA
被序列化?
这个问题的解决方案是什么?我怎么能有一个类似于ListOfCarsB
的类,但仍然有任何额外的成员序列化?我尝试使用属性[JsonProperty("CollectionName"]
和[JsonRequired]
,但这些似乎什么都不做。
答案 0 :(得分:0)
这是因为你的第二个例子是一个列表,而第一个例子只包含一个。 Json.Net知道如何从列表创建json,因此忽略了其余的自定义代码。除了编写自定义格式化程序
之外,您无能为力