我有以下C#类,其中包含2个构造函数:
public class DataPoint
{
public DataPoint(double x, double y)
{
this.X = x;
this.Y = y;
}
public DataPoint(double y, string label)
{
this.Y = y;
this.Label = label;
}
//Explicitly setting the name to be used while serializing to JSON.
[DataMember(Name = "x")]
public Nullable<double> X = null;
//Explicitly setting the name to be used while serializing to JSON.
[DataMember(Name = "y")]
public Nullable<double> Y = null;
//Explicitly setting the name to be used while serializing to JSON.
[DataMember(Name = "label")]
public string Label;
}
在我的MVC控制器中,我需要创建DataPoint
类的实例并使用第二个构造函数,即public DataPoint(double y, string label)
。
我在下面的代码中执行此操作,然后将对象序列化为JSON。
List<DataPoint> dataPoints = new List<DataPoint>{
new DataPoint(10, "cat 1"),
new DataPoint(20, "cat 2")
};
ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints);
当我查看返回的JSON时,它看起来像这样
[{"x":null,"y":10.0,"label":"cat 1"},{"x":null,"y":20.0,"label":"cat 2"}]
我的问题是我不希望我的JSON数据中包含x
元素。
为什么在我没有实例化DataPoint
类中的第一个构造函数时会发生这种情况?
感谢您的帮助。
答案 0 :(得分:1)
您可以使用ShouldSerialize方法。
将此添加到您的DataPoint类
public bool ShouldSerializeX()
{
return (X != null);
}
然后将Formatting.Indented
添加到序列化调用中:
ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints, Formatting.Indented);