0

ジェネリック オブジェクトのリストを xml ファイルにシリアル化するジェネリック ラッパーを作成しようとしていますが、要素が継承されたクラス名ではなく基本クラスの名前を使用していることを除いて、すべて正常に動作します。作成する方法はありますか継承されたクラスの名前を表示しますか?

例えば..

public class ObjectList
{
 [XmlElement("I want my inherited class here but it shows the base class object")]
 public List<Base> Items
 {
      get { return items; }
 }
}

public class Inherited : Base
{
}
4

1 に答える 1

1

これを行う唯一の方法はオーバーライドを設定することであることがわかりました

  Type type = list.Items.First().GetType();
  string root = type.Name + "s";

  XmlElementAttribute myAttribute = new XmlElementAttribute();
  myAttribute.ElementName = type.Name;

  XmlAttributes attribs = new XmlAttributes();
  attribs.XmlElements.Add(myAttribute);

  XmlAttributeOverrides myOverride = new XmlAttributeOverrides();

   myOverride.Add(typeof(ObjectList), "Items", attribs);

   XmlWriter xmlw = XmlWriter.Create(fileName);
   XmlSerializer writer = new XmlSerializer(
                typeof(ObjectList), 
                myOverride, 
                new Type[] { type }, 
                null,
                null);
于 2012-11-29T11:27:21.993 に答える