У меня есть простая модель объекта ADO.NET, которую я просматриваю с помощью OData. Одним из полей в модели сущности является тип географии (география в SQL Server). Я могу запросить данные просто отлично, и я получаю следующий сериализованный формат колонок географии:Изменение сериализации географии в JSON.NET + WebApi2/OData
"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();
}
}
и добавить его в настройках Serializer JSON в моей конфигурации OData:
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());
, но это также не было никакого эффекта.
Надеюсь, кто-то может указать, что я делаю неправильно?
Благодарим за это. Я быстро проскочил, но я не вижу места, где я могу изменить его сериализацию. Я попробую спросить на сайте OData, так как это, кажется, проблема. Еще раз спасибо. – Barguast