【发布时间】:2019-05-22 16:09:21
【问题描述】:
我正在尝试使用带有自定义 JsonConverter 的 JSON.NET 序列化可空结构。我希望在 JSON 输出中忽略/省略 null 值,例如我希望下面的 JSON 输出为 {} 而不是 {"Number":null}。如何做到这一点?这是一个带有单元测试的最小重现,其中包含我想要实现的目标。
[Fact]
public void UnitTest()
{
int? number = null;
var json = JsonConvert.SerializeObject(
new Entity { Number = new HasValue<int?>(number) },
new JsonSerializerSettings()
{
DefaultValueHandling = DefaultValueHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore
});
Assert.Equal("{}", json); // Fails because json = {"Number":null}
}
public class Entity
{
[JsonConverter(typeof(NullJsonConverter))]
public HasValue<int?>? Number { get; set; }
}
public struct HasValue<T>
{
public HasValue(T value) => this.Value = value;
public object Value { get; set; }
}
public class NullJsonConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanConvert(Type objectType) => true;
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => throw new NotImplementedException();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var values = (HasValue<int?>)value;
var objectValue = values.Value;
if (objectValue == null)
{
// How can I skip writing this property?
}
else
{
var token = JToken.FromObject(objectValue, serializer);
token.WriteTo(writer);
}
}
}
【问题讨论】:
标签: c# .net json json.net jsonconverter