2

次のような別のクラスのプロパティとしてカスタム コレクション クラスがあります。

class MyDataClass
{
    CustomCollection<MyType> DataCollection;
}

IXmlSerializable を実装しているため、問題なくシリアル化できます。私の唯一の不満は、結果の xml が次のようになることです。

<MyDataClass>
  <DataCollection>
    <MyType />
    <MyType />
  </DataCollection>
</MyDataClass>

コレクションを xml にしたくない場合は、次のようにします。

<MyDataClass>
  <MyType />
  <MyType />
</MyDataClass>

リストと配列については、[XmlElement] 属性を追加して、xml シリアライザーにコレクションを要素のラップされていないリストとしてレンダリングするように指示できることを読みましたが、それは私にとってはうまくいきません。

4

1 に答える 1

1

これはうまくいくはずです:

public class MyDataClass
{
    [XmlElement("MyType")]
    public CustomCollection<MyType> DataCollection;

} 

public class CustomCollection<T> : List<T> { }
public class MyType { }

public static void Main()
{
    MyDataClass c = new MyDataClass();
    c.DataCollection = new CustomCollection<MyType>();
    c.DataCollection.Add(new MyType { });
    c.DataCollection.Add(new MyType { });

    XmlSerializer xsSubmit = new XmlSerializer(typeof(MyDataClass));
    StringWriter sww = new StringWriter();
    XmlWriter writer = XmlWriter.Create(sww);
    xsSubmit.Serialize(writer, c);
    var xml = sww.ToString(); // Your xml
}

結果のxmlは次のようになります

  <?xml version="1.0" encoding="utf-16" ?> 
    <MyDataClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <MyType /> 
      <MyType /> 
   </MyDataClass>
于 2013-02-26T21:34:56.793 に答える