3

特定の方法でオブジェクトをシリアライズしようとしています。メイン クラスには、いくつかの属性を保持するコンテナ クラスがありますが、実際には、スキーマの観点から、これらの属性はメイン クラスにある必要があります。シリアル化のために、コンテナ クラスをバイパスし、コンテナ クラスのプロパティをメイン クラスのプロパティとして扱う方法はありますか?

次の行に沿って 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; }
}
4

1 に答える 1

0

MainObjectserializeを呼び出すときに何が起こるかを制御できるように、IXmlSerializable を実装してみてください。read および write 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();
        //...
    }
}
于 2013-09-17T22:10:25.933 に答える