代码之家  ›  专栏  ›  技术社区  ›  NickAldwin

如何用XML序列化没有无参数构造函数的密封类?

  •  5
  • NickAldwin  · 技术社区  · 16 年前

    我现在用的是 XMLSerializer

    有什么方法可以让我指定该类应该如何序列化吗?

    再次,如果这是一个骗局,我道歉,但我不知道该搜索什么。

    [编辑]澄清一下,我无法访问密封类的源代码。

    5 回复  |  直到 16 年前
        1
  •  12
  •   Tim Robinson    16 年前

    直接做是不可能的; XmlSerializer 无法处理没有无参数构造函数的类。

    我通常做的是将无参数类包装到另一个与XML兼容的类中。包装类有一个无参数构造函数和一组读写属性;它有一个 FromXml 方法调用实际类的构造函数。

    [XmlIgnore]
    public SomeClass SomeProperty { get; set; }
    
    [XmlElement("SomeProperty")]
    public XmlSomeClass XmlSomeProperty
    {
        get { return XmlSomeClass.ToXml(SomeProperty); }
        set { SomeProperty = value.FromXml(); }
    }
    
        2
  •  0
  •   Steve Danner    16 年前

    你能做一个私有的无参数构造函数吗?假设您有权访问类的代码,这将起作用。

        3
  •  0
  •   Dave Swersky    16 年前

    你可以实现 ISerializable

        4
  •  0
  •   Marc Gravell    16 年前

    根据xml的复杂性,您可以 可以 祝你好运 DataContractSerializer . 这不能提供任何东西 喜欢 相同级别的xml控件,但它完全绕过了构造函数。也适用于私人类型。

    我可能还会问:它真的需要是xml吗?对于json或protobuf之类的东西,还有其他序列化程序没有 XmlSerializer 限制。

        5
  •  0
  •   Max Toro    16 年前

    使用 IXmlSerializable , XmlSerializer 太有限了。