Как XML сериализовать неизвестный тип? - PullRequest
0 голосов
/ 07 февраля 2011

В моем приложении я выполняю сериализацию XML, проблема в том, что если мы хотим сериализовать тип, в этом классе должен быть атрибут [Serializable], в моем случае я получаю неизвестный объект для сериализации Как я могу сделатьчто?

например, я хочу сериализовать это:

 public class UnKnownType
{
    public string Name
    {
        get;
        set;
    }
    public int Age
    {
        get;
        set;
    }
    public DateTime DOB
    {
        get;
        set;

    }
    public bool IsPrimary
    {
        get;
        set;
    }
}

Я получаю эту ошибку при сериализации

в System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Объект o, пространства имен XmlSerializerNamespaces, String encodingStyle, String id) в System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Объект o, XmlSerializerNamespaces namespaces, String encodingStyle) в System.Xml.izeWer XSW.SerialSize.Service.SizeОбъект o, пространства имен XmlSerializerNamespaces) в System.Xml.Serialization.XmlSerializer.Serialize (TextWriter textWriter, Объект o, пространства имен XmlSerializerNamespaces) в System.Xml.Serialization.XmlSerializer.Serialize (TextWriter textWritsole в объекте opplication.pp)String [] args) в D: \ New Adventures \ ConsoleApplication4 \ ConsoleApplication4 \ Program.cs: строка 29

Ответы [ 3 ]

3 голосов
/ 07 февраля 2011

Сериализация XML не требует атрибута SerializableAttribute.Однако вы должны знать, что сериализуются только те свойства, которые имеют общедоступные методы получения и установки.

2 голосов
/ 07 февраля 2011

Если вы имеете в виду, что у вас есть класс, такой как

class MyClass
{
    IMyInterface Something{get; set;}
}

Тогда вы можете указать XmlSerializer тип IMyInterface во время создания экземпляра:

XmlSerializer xs = new XmlSerializer(typeof(MyClass), new Type[] {typeof(MyImplementation)}

Где MyImplementation реализует IMyInterface.

0 голосов
/ 07 февраля 2011

Попробуйте использовать XamlWriter.Save(unknownObject). Это очень умный сериализатор: -)

...