【问题标题】:How to XML serialize an Unknown type?如何 XML 序列化未知类型?
【发布时间】:2011-06-22 19:52:15
【问题描述】:

在我的应用程序中,我正在做 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, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,对象 o,XmlSerializerNamespaces 命名空间,字符串 encodingStyle) 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,对象 o,XmlSerializerNamespaces 命名空间) 在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,Object o,XmlSerializerNamespaces 命名空间) 在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,对象 o) 在 D:\New Adventures\ConsoleApplication4\ConsoleApplication4\Program.cs:line 29 中的 ConsoleApplication4.Program.Main(String[] args)

【问题讨论】:

  • 你能贴一些相关的代码吗?
  • 在最坏的情况下,您可以将 UnknownObject 转换为 Object,然后对其进行序列化。

标签: c# .net xml-serialization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    那么你可以在实例化的时候告诉XmlSerializerIMyInterface的类型:

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

    MyImplementation 在哪里实现IMyInterface

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-19
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        相关资源
        最近更新 更多