すべてのタイプのすべてのプロパティとフィールドに対して null を無条件にスキップする場合は、 (またはIResolverStrategy
である可能性が高い) をサブクラス化し、 をオーバーライドして、null 値をスキップするデリゲートを返すことができます。JsonResolverStrategy
PocoResolverStrategy
GetValueIgnoredCallback(MemberInfo member)
public class SkipNullJsonResolverStrategy : JsonResolverStrategy // Or PocoResolverStrategy
{
public override ValueIgnoredDelegate GetValueIgnoredCallback(MemberInfo member)
{
Type type;
if (member is PropertyInfo)
type = ((PropertyInfo)member).PropertyType;
else if (member is FieldInfo)
type = ((FieldInfo)member).FieldType;
else
type = null;
var baseValueIgnored = base.GetValueIgnoredCallback(member);
if (type != null && (!type.IsValueType || Nullable.GetUnderlyingType(type) != null))
{
return (ValueIgnoredDelegate)((instance, memberValue) => (memberValue == null || (baseValueIgnored != null && baseValueIgnored(instance, memberValue))));
}
else
{
return baseValueIgnored;
}
}
}
次に、次のように使用します。
var settings = new DataWriterSettings(new SkipNullJsonResolverStrategy());
var writer = new JsonWriter(settings);
var json = writer.Write(rootObject);
選択したプロパティの null のみをスキップする場合は、JsonResolverStrategy
(またはサブクラス) を使用してから、次のいずれかを行う必要があります。
例えば:
public class ExampleClass
{
[JsonSpecifiedProperty("NameSpecified")]
public string Name { get; set; }
bool NameSpecified { get { return Name != null; } }
[DefaultValue(null)]
public int? NullInteger { get; set; }
[DefaultValue(null)]
public DateTime? NullableDateTime { get; set; }
}