我有一个在GET函数中返回json的控制器。我想忽略\删除我发送给第三部分的json的空值,空值和指南空值。
在WebApiConfig中,我使用: config.Formatters.JsonFormatter.SerializerSettings =新的JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}; 而且它适用于null值,但不适用于empty \ guid.empty值。
所以我尝试添加config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new EmptyToNullConverter());和类EmptyToNullConverter。要将空值转换为null,然后由另一个命令将其删除,但这是行不通的,因为它不会转换值。
EmptyToNullConverter 类为:
public class EmptyToNullConverter : JsonConverter
{
private JsonSerializer _stringSerializer = new JsonSerializer();
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string value = _stringSerializer.Deserialize<string>(reader);
if (string.IsNullOrEmpty(value) || value == Guid.Empty.ToString())
{
value = null;
}
return value;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
_stringSerializer.Serialize(writer, value);
}
}
我该怎么办?
非常感谢
答案 0 :(得分:0)
即使在序列化时对象类型为Guid
。它仍然不能为null,尝试在序列化级别进行覆盖可能会造成混乱,就像接收方在响应模型中期望Guid
一样。即使您没有在JSON响应中发送任何内容,它们的代码仍可能会初始化一个空的Guid
。
有什么原因不能使用可为空的Guid?鉴于您是堆栈溢出的新手,我可能会不明智地假设您是编码新手,因此您可能不熟悉可空值类型。
诸如int
,float
,GUID
,DateTime
等的值类型将始终具有默认值,但是您可以通过以下方式强制它们为空声明带有后缀的问号。
例如
int x // == 0;
int? x // == null;
Guid g // == 00000000-0000-0000-0000-000000000000;
Guid? g // == null;
一个好的通用规则是,如果值类型可以本质上为null,则使其为可为空。然后,您将不需要任何花哨的转换。