为什么Newtonsoft.Json没有序列化这个属性?

时间:2017-12-11 15:37:55

标签: c# json json.net

考虑以下计划:(.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],但这些似乎什么都不做。

1 个答案:

答案 0 :(得分:0)

这是因为你的第二个例子是一个列表,而第一个例子只包含一个。 Json.Net知道如何从列表创建json,因此忽略了其余的自定义代码。除了编写自定义格式化程序

之外,您无能为力