0

エクスポート フローに取り組んでいるときに、同じものを表す XML 要素がいくつかありますが、名前が異なります。これらの名前は他のソフトウェアによって定義されているため、変更できません。

私はそのようなものが必要です:

<class1>
  <MY_FIELD></MY_FIELD>
</class1>

<class2>
  <my_field></my_field>
</class2>

両方のフィールドで行う必要がある処理は同じであるため、それを含む抽象クラスを作成したいと考えました。

今、これは私が持っているものです:

public abstract class MyAbstract
{
    [XmlAttribute("MY_FIELD")]
    public MyField {get;set;}
}

[Serializable]
public class Class1 : MyAbstract
{
}

[Serializable]
public class Class2 : MyAbstract
{
}

属性を on に設定できるようにXmlAttribute、最終クラス ( class1and )に別のものを指定する方法はありますか?class2MyField

編集: を使用しようとしてXmlAttributeOverridesいますが、それは私が望むことをしているようですが、機能させることはできません。何が欠けているのかわからない。

var myType = typeof(Class1);
var overrides = new XmlAttributeOverrides();
var attrs = new XmlAttributes
{
  XmlAttribute = new XmlAttributeAttribute("test")
};
overrides.Add(myType, "MyField",attrs);

そしてシリアライザーのために

var serializer = new XmlSerializer(myType, overrides);

Edit2 : 最後に、抽象クラスの属性を削除し、シリアル化の目的で各クラスにゲッターを追加します。くだらないですが、誰かが私に適切なオプションを与えてくれることを願っています。

4

1 に答える 1

0

試す

public abstract class MyAbstract
{
    abstract public MyField {get;set;}
}

[Serializable]
public class Class1 : MyAbstract
{
    [XmlAttribute("MY_FIELD")]
    public override MyField {get;set;}
}

[Serializable]
public class Class2 : MyAbstract
{
    [XmlAttribute("my_field")]
    public override MyField {get;set;}
}
于 2013-08-29T09:29:25.303 に答える