生成JSON时如何避免序列化特定字段

时间:2018-04-06 11:19:16

标签: c# json constructor

我有以下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类中的第一个构造函数时会发生这种情况?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用ShouldSerialize方法。

将此添加到您的DataPoint类

public bool ShouldSerializeX()
{
    return (X != null);
}

然后将Formatting.Indented添加到序列化调用中:

ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints, Formatting.Indented);