我有一个简单的 ADO.NET 实体模型,我正在使用 OData 公开它。实体模型中的字段之一是地理类型(SQL Server 中的地理)。我可以很好地查询数据,我得到以下地理列的序列化格式:
"Shape":{
"WellKnownValue":{
"CoordinateSystemId":4326,
"WellKnownText":"POLYGON ((...)",
"WellKnownBinary":null
}
所以这行得通,但我希望我可以改变这个对象的序列化,使它更像:
"Shape":"4326:POLYGON((...))"
诚然,这主要是为了美观,但最好有一个更简单的图表和更短的信息。
我写了以下我认为会有所帮助的课程:
public class JsonGeographyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.Equals(typeof(DbGeography));
}
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 geog = (DbGeography)value;
if (geog != null)
writer.WriteValue(string.Format("{0}:{1}", geog.WellKnownValue.CoordinateSystemId, geog.WellKnownValue.WellKnownText));
else
writer.WriteNull();
}
}
并将其添加到我的 OData 配置中的 JSON 序列化程序设置中:
var config = new HttpConfiguration();
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new JsonGeographyConverter());
但这似乎没有什么不同。事实上,永远不会到达 CanConvert 中的断点,所以我倾向于认为我没有正确设置 JSON。
我也试过:
var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new JsonGeographyConverter());
但这也没有效果。
希望有人能指出我做错了什么?