Проблема с сериализацией в JSON.NET - PullRequest
11 голосов
/ 17 марта 2012

У меня есть класс с типом свойства Point (структура в .NET Framework).Я использую JsonConvert из Newton.Json для сериализации в JSON.Но результат равен

 "Point" : "100,100" 

Вместо

 "Point" : { X: "100", Y: "100"}

Когда я заменяю JsonConvert стандартным JavascriptSerializer, все работает нормально.

Но я хочу использовать JsonConverter из JSON.Нет, потому что это намного быстрее.

1 Ответ

9 голосов
/ 17 марта 2012

Это потому, что Point определил свой собственный TypeConverter, и JSON.NET использует его для сериализации.Я не уверен, есть ли чистый способ отключить это поведение, но вы, безусловно, можете создать свой собственный JsonConverter, который ведет себя так, как вы хотите:

class PointConverter : JsonConverter
{
    public override void WriteJson(
        JsonWriter writer, object value, JsonSerializer serializer)
    {
        var point = (Point)value;

        serializer.Serialize(
            writer, new JObject { { "X", point.X }, { "Y", point.Y } });
    }

    public override object ReadJson(
        JsonReader reader, Type objectType, object existingValue,
        JsonSerializer serializer)
    {
        var jObject = serializer.Deserialize<JObject>(reader);

        return new Point((double)jObject["X"], (double)jObject["Y"]);
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Point);
    }
}

Затем вы можете использовать его следующим образом:

JsonConvert.SerializeObject(
    new { Point = new Point(15, 12) },
    new PointConverter())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...