如何XML序列化未知类型?

时间:2011-02-07 15:34:15

标签: c# .net xml-serialization

在我的应用程序中我正在进行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;
    }
}

我在序列化时遇到此错误

at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces namespaces,String encodingStyle,String id)    在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces namespaces,String encodingStyle)    在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces名称空间)    在System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,Object o,XmlSerializerNamespaces名称空间)    在System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,Object o)    在D:\ New Adventures \ ConsoleApplication4 \ ConsoleApplication4 \ Program.cs:第29行的ConsoleApplication4.Program.Main(String [] args)中

3 个答案:

答案 0 :(得分:3)

XML序列化不需要SerializableAttribute。 但是,您必须知道,只有具有公共getter和setter的属性才会被序列化。

答案 1 :(得分:2)

如果你的意思是你有一个类,如

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

然后你可以在实例化时告诉XmlSerializer IMyInterface的类型:

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

MyImplementation实施IMyInterface

答案 2 :(得分:0)

尝试使用XamlWriter.Save(unknownObject)。这是非常聪明的序列化器: - )