Как правильно сериализовать базовый класс в JSON в silverlight? - PullRequest
0 голосов
/ 17 ноября 2008

У меня есть следующая структура:

class Base
{
}

class Child : Base
{
}

Когда я пытаюсь сделать следующее:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Base));
serializer.WriteObject(stream, data);

Ошибка с сообщением об ошибке:

Тип 'MyNamespace.Child' с названием контракта данных «Ребенок: http://schemas.datacontract.org/2004/07/MyNamespace' не ожидается Добавить любые типы не статически известен к списку известных типы - например, с помощью Атрибут KnownTypeAttribute или добавив их в список известных типов передано в DataContractSerializer.

Кто-нибудь знает, как правильно сериализовать только дочерний класс?

1 Ответ

3 голосов
/ 18 ноября 2008

Если вы добавите атрибут KnownType (из System.Runtime.Serialization) в базовый класс для дочернего класса, он будет работать:

[KnownType(typeof(Child))]
class Base
{}

class Child : Base
{}

Это необходимо, потому что сериализатор не загружает ваш дочерний тип, когда вы настраиваете его для сериализации базового класса (по крайней мере, это мое понимание).

...