我有一个类,它有很多属性,其中许多属性可以为null值。我正在使用JSON.NET序列化这个类,我希望去掉那些具有null值的属性。
对于每个物业的基础上,我可以做:
public class MyClass
{
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
object property1;
.
.
.
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
object property346;
}
但是这是非常乏味的,很难维护并且降低可读性。有没有一种方法可以在整个类上设置注释,使其在序列化时忽略具有null值的属性。我确实希望能够通过注释而不是代码来实现这一点。
阅读文档,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.
现在,您可以在一个地方为所有对象添加配置。