2

DataContractSerializer の使用を検討していますが、適切な出力形式を取得するのに問題があります。DataContractSerializer は、次のクラスをシリアル化します

[DataContract(Name = "response")]
public class MyCollection<T> 
{
    [DataMember]
    public List<T> entry { get; set; }
    [DataMember]
    public int index { get; set; }
}

の中へ

<response><entry><T1>object1</T1><T2>object2</T2></entry><index></index></response>

しかし、私が欲しいのは

<response><entry><T1>object1</T1></entry><entry><T2>object2</T2></entry><index></index></response>

DataContractSerializer でこれを行うにはどうすればよいですか? しかし、DataContractJsonSerializer の最初の出力も維持しますか?

4

2 に答える 2

4

この記事に基づくと、DataContractSerializer は結果の xml のカスタマイズをサポートしていないようです。

http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/

MS サイトには、重要な注意事項があります。このような型のインスタンスをシリアル化しようとすると、例外がスローされます。

PS: 申し訳ありませんが、2 番目のリンクを投稿できませんでしたが、エンジンが新しいユーザーに複数のリンクを投稿することを許可していません。

よろしく、ハーバート

于 2009-07-14T23:57:39.460 に答える
1

xml を作成している場合、xml シリアライザーの方が適しているのではないかと思います (名前などをより細かく制御できます)。

ただし、問題は、XmlSerializerジェネリックの最大のファンであるとは限らないことです...

[XmlArray]さらに、 / ] などを含むいくつかのオプションを試してみました[XmlArrayItem...必要な形式にするのは非常に難しいようです...さらに、T1/T2が何を意味するのかを推測するのは簡単ではありませんが、次のようになります:

[XmlRoot("response")]
public class MyResponse : MyCollection<int> { }

[DataContract(Name = "response")]
public class MyCollection<T>
{
    [DataMember]
    [XmlElement("entry")]
    public List<T> entry { get; set; }
    [DataMember]
    public int index { get; set; }
}

これには と の両方XmlSerializerDataContractSerializer属性がありますが、応答に使用する型のジェネリックを失う必要がありました (したがって、「クローズド」MyResponse型です) 。

于 2009-06-11T12:22:16.963 に答える