MVC4のWebAPIを利用して、Webサービスに単純なAPIを提供しています。[XmlType]
モデルで[XmlRoot]
、などを使用してルート要素と各エンティティをラップする要素にカスタム名を設定することについてのSOに関するさまざまな投稿を読みました[XmlElement]
が、いずれも効果がないようです。APIは全体的に正常に機能しますが、XML属性は効果がないようで、無関係な要素名が残ります。
例をより明確にするために、コードをいくらか簡略化しましたが、基本的には次のようになります。
APIコントローラー:
public class SomeController : ApiController
{
[HttpGet]
public List<MyViewModel> All()
{
return ApiProvider.All()
.Select(v => new MyViewModel
{
SomeId = v.SomeId
SomeValue = v.SomeValue
}).ToList();
}
}
MyViewModel:
public class MyViewModel
{
public int SomeId { get; set; }
public int SomeValue { get; set; }
}
現在のXML応答:
<ArrayOfMyViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/...">
<MyViewModel>
<SomeId>3</SomeId>
<SomeValue>My value</SomeValue>
</MyViewModel>
</ArrayOfMyViewModel>
必要なXML応答:
<CustomRootName xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/...">
<CustomEntityName>
<SomeId>3</SomeId>
<SomeValue>My value</SomeValue>
</CustomEntityName>
</CustomRootName>
使用したいシリアライザーなどの構成を変更していません。
ここで何かが足りないのですか、それとも要素の名前を変更できないのですか?他に取るべきアプローチ、または私が見逃しているいくつかの必要な設定はありますか?