DOBON.NET DOBON.NETプログラミング掲示板過去ログ

逆シリアル化について

環境/言語:[C#]
分類:[.NET]

記事の”オブジェクトのXMLシリアル化、逆シリアル化を行う”を参考にして
逆シリアル化を行っていて行き詰ってしまいました。

下記のようなXMLの場合どのようにクラス定義を書けばいいのでしょう?

自分で調べたかぎりではXmlDocumentを使って読み込むするしか
方法が思いつきませんでした。

<A>
  <B TEST="TEST">CCC</B>
</A>
そもそもシリアライズってのは、オブジェクトありきのものです。なんらかのクラス(のインスタンス)があってそれを可搬性のために XML なりに書き出すものであって、先に XML があってそれを読み込むという目的には適していません。
そういう場合なら、XmlDocument などで読み取る方が優れているでしょう。
一応、XmlAttributeAttribute 属性を使えばシリアライズ・デシリアライズ時にメンバを XML の属性値とするように指定できますが。
回答ありがとうございます。

適していないのはよくわかりました。

>一応、XmlAttributeAttribute 属性を使えばシリアライズ・デシリアライズ時にメンバを XML の属性値とするように指定できますが

XmlAttributeなどの属性を使っても属性値”TEST”か値”CCC”のどちらかしか
取得出来ないと思っているんですが取得する方法はあるのでしょうか?
適切にクラスを分け、適切な XML シリアル化を制御する属性をつければ可能ですね。
■No25622に返信(pppさんの記事)
> XmlAttributeなどの属性を使っても属性値”TEST”か値”CCC”のどちらかしか
> 取得出来ないと思っているんですが取得する方法はあるのでしょうか?

[Serializable, XmlRoot("A")]
public struct Foo
{
    [XmlElement("B")]
    public Bar member;

    public struct Bar
    {
        [XmlText]
        public string member1;

        [XmlAttribute("TEST")]
        public string member2;
    }
}

DOBON.NET | プログラミング道 | プログラミング掲示板