XML序列化 - 绕过容器类?

时间:2013-09-17 21:34:38

标签: c# .net xml-serialization

我正在尝试以特定方式序列化对象。主类有一个容器类,它包含一些属性,但从模式的角度来看,这些属性实际上应该在主类上。有没有办法绕过容器类并将容器类上的属性视为主类的属性,以便进行序列化?

我正在尝试按以下方式创建XML:

<Main foo="3" bar="something">
  <Others>etc</Others>
</Main>

来自此代码:

[System.Xml.Serialization.XmlRootAttribute("Main", Namespace = "")]
public class MainObject
{
    public HelperContainer { get; set; }

    public string Others { get; set; }
}

public class HelperContainer
{
    [System.Xml.Serialization.XmlAttributeAttribute(AttributeName = "foo")]
    public int Foo { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute(AttributeName = "bar")]
    public string Bar { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您可能想尝试在MainObject上实现IXmlSerializable,以便能够控制调用serialize时发生的情况。对于读取和写入xml方法,请指定要序列化的字段。

查看msdn:http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

类似的东西:

public class MainObject : IXmlSerializable
{
    public HelperContainer { get; set; }

    public string Others { get; set; }

    public void WriteXml (XmlWriter writer)
    {
        writer.WriteString(Others);
        writer.WriteAttributeString("foo", HelperContainer.Foo);
        writer.WriteAttributeString("bar", HelperContainer.Bar);
    }

    public void ReadXml (XmlReader reader)
    {
        Others = reader.ReadString();
        //...
    }
}
相关问题