是否可以在类上为NullValueHandling设置Json.Net注释属性?

时间:2017-01-29 02:15:52

标签: .net json.net

我有一个包含很多属性的类,其中许多属性都可以为null。我正在使用JSON.NET序列化这个类,我想省略那些具有null值的属性。

对于每个房产的财产,我可以这样做:

public class MyClass
{
   [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
   object property1;
       .
       .
       . 
   [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
   object property346;
}

但这非常繁琐,难以维护并降低了可读性。有没有办法在整个类上设置注释,使其在序列化时忽略具有空值的属性。我希望能够通过注释而不是代码来实现。

1 个答案:

答案 0 :(得分:1)

阅读文档时,似乎JsonObjectAttribute没有提供这样做的方法。但是,您可以将配置添加到扩展方法,该方法根据要序列化的对象更改序列化设置。

public static string ToJsonString(this object obj)
{
    Type[] objectWithoutNulls = { typeof(MyClass) };
    bool isWithoutNulls = objectWithoutNulls.Contains(obj.GetType());

    if (isWithoutNulls)
    {
        return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
    }
    else
    {
        return JsonConvert.SerializeObject(obj);
    }
}

然后你可以在所有对象上使用它,如:

var myClass = new MyClass();
var myObject = new Object();

var myClassJson = myClass.ToJsonString(); // Will remove nulls.
var myObjectJson = myObject.ToJsonString();  // Will not remove nulls.

现在,您可以在一个地方添加所有对象的配置。