12

標準の MVC 4 WebApi プロジェクトから次の応答を得ています。

<ArrayOfProduct xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</ArrayOfProduct>

返せるようにしようと思います

<Products>
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</Products>

これを解決すると思われるさまざまな方法への多くの参照を見つけましたが、どれも機能しません。

デフォルトのシリアライザを変更しても機能しません。

のカスタマーシリアライザーを作成してProductも機能しません。

適切な XmlRoot および XmlElement 属性で公開された新しいクラスを作成してList<Product>も機能しません。

属性の追加Datacontractは機能しません。

属性の追加CollectionDatacontractは機能しません。

これは、私を除いて、他のすべての人にとって非常に単純に見えます!


あなたが怠け者になりたいなら、あなたは試すことができます:

CSV.new(ARGF.file).each do |row|
  ...
end

ソース:
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#label-Wrap+an+IO+Object

4

1 に答える 1

16

代わりに XmlSeriazlier を使用してみてください。

config.Formatters.XmlFormatter.UseXmlSerializer = true;

次に、Product のコレクションから派生するクラスを定義し、[XmlRoot("Products")] を使用して要素名を「ArrayOfProduct」から「Products」に変更してみます。

たとえば、List を使用する代わりに、Products クラスを使用します。

[XmlRoot("Products")]
public class Products : List<Product> { }

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public double Price { get; set; }
}

ApiController のアクション:

    public Products Get()
    {
        return new Products()
        {
            new Product() 
            {
                Id = 1,
                Name = "Tomato Soup", 
                Category = "Groceries",
                Price = 1
            }
        };
    }
于 2012-10-24T20:41:01.617 に答える