1

ASP.NET MVC 4.0 で WebAPI を使用して API を構築しています。新しい非常にスマートな XML をクラスとして貼り付け機能を使用して、ビジネス アナリストから提供されたサンプル XML に基づいてモデル クラスを作成しました。

問題は、クライアントが application/xml を受け入れたときに、シリアル化された応答が元の XML のように見えないことです。

XMLSerializer を使用して一部の XML を手動でデシリアライズおよびシリアライズ (ラウンドトリップ) しましたが、元の形式に近い方が優れていますが、名前空間のプレフィックスがいくつかありません。

出力が仕様どおりであることを確認するにはどうすればよいですか?

4

1 に答える 1

2

まず、WebAPI が XmlSerializer を使用して WebAPI 応答をフォーマットしていることを確認するか、少なくともこのリソース/API だけに XmlSerializer を使用する必要があります。

このWebApiConfig.csファイルには、ルート登録の内容とコメントアウトされたコードが含まれています。

そのチャンクの下に追加し、次を追加します。

var xmlSerializer = new XmlSerializer(typeof(FruitXmlModel));
config.Formatters.XmlFormatter.SetSerializer<FruitXmlModel>(xmlSerializer);

これにより、 CLR 型XmlSerializerをシリアル化するときに使用されるold が指定されます。FruitXmlModelおそらく、XML シリアル化アセンブリを参照する必要があることに注意してください。

次に、新しい名前空間を開始する XML 内の要素を表すモデル内のクラスに、このコードを追加する必要があります。

...

[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Namespaces = new XmlSerializerNamespaces();

public FruitXmlModel() // ctor for one of my models
{
    this.Namespaces.Add("banana", "http://www.fruitschema.org/banana");
}

...

Paste XML as Classes 機能を使用した場合、このクラスにはXmlTypeAttribute、正しい名前空間が設定された正しい属性ですでに注釈が付けられているはずです。

すべて問題なく、この単純な変更により、WebAPI と XmlSerializer に、適切にプレフィックスが付けられた XML 出力を生成するために必要なすべてが提供されます。

幸運を祈ります、ルーク、またすぐに会えることを願っています。

于 2013-08-08T21:06:58.953 に答える