Как сериализовать производный класс в Silverlight - PullRequest
1 голос
/ 04 февраля 2009

Я создал пользовательский элемент управления в XAML, а также добавил некоторые пользовательские свойства. Теперь я хочу сериализовать его в JSON, если это возможно. Вот (по сути), что у меня есть:

public partial class MyCustomClass : UserControl
{
    public Dictionary<char, int[]> ValueMap;
    public int Value { get; set; }
}

И в коде, который обрабатывает сериализацию:

public static string Serialize(object objectToSerialize)
{
    using (MemoryStream ms = new MemoryStream())
    {
        DataContractJsonSerializer serializer = 
          new DataContractJsonSerializer(objectToSerialize.GetType());
        serializer.WriteObject(ms, objectToSerialize);
        ms.Position = 0;
        using (StreamReader reader = new StreamReader(ms)) 
          return reader.ReadToEnd();
    }
}

Однако, serializer.WriteObject(ms, objectToSerialize); бросает

System.Runtime.Serialization.InvalidDataContractException:

Подумайте о том, чтобы пометить его Атрибут DataContractAttribute и отмечая всех своих членов вы хотите сериализовано с Атрибут DataMemberAttribute. Кроме того, вы можете убедиться, что тип является общедоступным и имеет параметры без параметров конструктор - все открытые члены тип будет затем сериализован, и атрибуты не требуются. "

Теперь, когда я добавляю эти атрибуты к MyCustomClass, я, конечно, получаю то же исключение, только на этот раз для System.Windows.UIElement вместо MyCustomClass.

Итак, есть ли способ сериализации моего пользовательского производного класса с существующим методом сериализации, или я должен просто написать пользовательские методы сериализации для MyCustomClass?

1 Ответ

3 голосов
/ 05 февраля 2009

Я думаю, что вам лучше реализовать IXmlSerializable здесь, так как вы действительно не хотите без разбора сериализовать все в базовом классе (и я не верю, что вы можете, честно говоря).

Скорее, реализуйте IXmlSerializable на MyCustomClass, и тогда DataContractJsonSerializer сможет использовать эту реализацию для сериализации в / из JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...