【发布时间】:2014-08-28 11:56:09
【问题描述】:
我为 Guid 实现了一个自定义的 JsonConverter。
如果我在像这样序列化的类的属性(Guid 类型)上声明它
[JsonConverter(typeof(JsonGuidConverter))]
然后它被调用并且工作正常。
但是,我想“自动”使用它,不需要属性,所以我这样做:
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new JsonGuidConverter());
不幸的是,这导致我的转换器永远不会被调用。我在 MVC 5.1 项目中使用 WebApi 2.1。
有什么想法吗?
编辑:这里是转换器代码
public class JsonGuidConverter : JsonConverter
{
public override bool CanRead
{
get
{
// We only need the converter for writing Guids without dashes, for reading the default mechanism is fine
return false;
}
}
public override bool CanWrite
{
get
{
return true;
}
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Guid) || objectType == typeof(Guid?);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
// We declared above CanRead false so the default serialization will be used
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
if (value == null || Guid.Empty.Equals(value))
{
writer.WriteValue(string.Empty);
}
else
{
writer.WriteValue(((Guid)value).ToStringNoDashes());
}
}
}
附加说明,当尝试通过将 CanRead/CanWrite 属性和 CanConvert 方法添加到转换器集合中来使用它时,甚至不会调用它。
也许这与我如何从 webapi 控制器返回数据有关?
public async Task<IHttpActionResult> GetSettings()
{
...
return Json(something);
}
【问题讨论】:
-
你能分享你对
JsonGuidConverter的实现吗? -
我编辑了问题以包含代码。
-
感谢您的代码。你可以看看我的回复。
标签: json asp.net-web-api