Сериализация производных объектов с помощью json.net - PullRequest
2 голосов
/ 16 ноября 2011

Сериализация объекта, унаследованного от Dictionary<DateTime, double>, не включает поля и свойства в результирующей строке json.

Примечание. Это упрощенный пример.Да, я знаю, что не следует наследовать от типа Dictionary.

Сериализация объекта типа:

public class Timeserie : Dictionary<DateTime, double>
{
    public string id;

    public Timeserie()
    {

    }

    public Timeserie(string id)
    {
        this.id = id;
    }
}

Использование:

var json_settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
var s = JsonConvert.SerializeObject(timeserie, Formatting.Indented, json_settings);

Включаеттолько данные базового класса:

{
  "01/02/2009 00:00:00": 10.23,
  "01/05/2009 00:00:00": 11.33
}

Поле id не включено.

Как мне использовать json.net, чтобы поля и свойства, объявленные в производном классе, быливходит в сериализацию?

1 Ответ

0 голосов
/ 16 ноября 2011

Кажется, просматривая код для json.net, у него есть специальный контракт на обработку словарей.

, поэтому либо заключите новый контракт, либо заключите словарь в капсулу (т. Е. Сделайте словарь свойствомваш класс)

если вы создаете простые классы, которые наследуются друг от друга, этот код будет сериализовать все свойства производных классов

...