public class User
{
public string Id { get; set; }
public string Name { get; set; }
public string FriendId { get; set; }
public int Age { get; set; }
public DateTime Birth { get; set; }
public List Colleague { get; set; }
public User CloseFriend { get; set; }
public User()
{
Colleague = new List();
}
}
var u1 = new User { Id = "D1", Name = "DONMA" };
Result += JsonConvert.SerializeObject(u1,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
//{"Id":"D1","Name":"DONMA","Age":0,"Birth":"0001-01-01T00:00:00","Colleague":[]}
var u1 = new User { Id = "D1", Name = "DONMA" };
Result += JsonConvert.SerializeObject(u1,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
});
//{"Id":"D1","Name":"DONMA","Colleague":[]}
List<object> 在 Ctor 的時候先 new 出來,這時候怎麼辦只好動用 DefaultContractResolver
EmptyListResolver.cs
public class EmptyListResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
Type propType = ((PropertyInfo)member).PropertyType;
property.ShouldSerialize = obj =>
{
if (propType.IsGenericType &&
propType.GetGenericTypeDefinition() == typeof(List<>))
{
return (property.ValueProvider.GetValue(obj) as dynamic).Count > 0;
}
return true;
};
return property;
}
}
這時候 需要在 SerializeObject 加上 ContractResolver = new EmptyListResolver()
var u1 = new User { Id = "D1", Name = "DONMA" };
Result += JsonConvert.SerializeObject(u1,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
ContractResolver = new EmptyListResolver()
});
//{"Id":"D1","Name":"DONMA"}