5

Framework 4.0 で Web API をいじる XML のみの出力が欲しかったため、フォーマッター コレクションから JSON フォーマッターを削除しました。ここで、XMLSerializer が出力する標準 XML を変更したいと思います。

<?xml version="1.0"?>
-<ArrayOfCategory xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-
  <Category>
    <Id>1</Id>
    <Name>Drink</Name>
  </Category>-
  <Category>
    <Id>2</Id>
    <Name>Snack</Name>
  </Category>
</ArrayOfCategory>

「Arrayof」ノードをより意味のあるものに変更したいので、「Arrayof」ノードの上に (追加情報を含む) いくつかのノードを追加する必要があります。

これを行う簡単な方法はありますか?または、カスタム フォーマッタ/シリアライザを作成する必要がありますか?

4

1 に答える 1

7

「Arrayof」ノードをより意味のあるものに変更したいので、「Arrayof」ノードの上に (追加情報を含む) いくつかのノードを追加する必要があります。

このような XML のカスタマイズが必要な場合は、XmlFormatter で既定で使用される DataContractSerializer ではなく、XmlSerializer を使用する必要があります。

config.Formatters.XmlFormatter.UseXmlSerializer = true;

次に、Category のコレクションをクラスにラップし、[XmlRoot]、[XmlElement]、および [XmlArray] を使用して要素名をカスタマイズできます。次に例を示します。

[XmlRoot(ElementName = "node")]
public class Node
{
    [XmlElement(ElementName= "SomeInfo")]
    public string Node1;

    [XmlElement(ElementName = "OtherInfo")]
    public string Node2;

    [XmlArray("Categories")]
    public List<Category> CatList;
}

詳細については、この MSDN の記事を参照してください: Controlling XML Serialization Using Attributes

于 2012-10-24T20:19:17.640 に答える