我有一个包含很多属性的类,其中许多属性都可以为null。我正在使用JSON.NET序列化这个类,我想省略那些具有null值的属性。
对于每个房产的财产,我可以这样做:
public class MyClass
{
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
object property1;
.
.
.
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
object property346;
}
但这非常繁琐,难以维护并降低了可读性。有没有办法在整个类上设置注释,使其在序列化时忽略具有空值的属性。我希望能够通过注释而不是代码来实现。
答案 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.
现在,您可以在一个地方添加所有对象的配置。