В двух словах, как мне кодировать метод контроллера Web API 2.0, приведенный ниже, для возврата худого XML, аналогичного результату JSON, с тем же количеством свойств и именами без создания строго типизированного результата для динамического объекта? Можно видеть, что различные свойства Web API сериализуются в зависимости от того, был ли запрос JSON или XML.
Метод контроллера:
[HttpGet]
public IHttpActionResult GetStuff() {
dynamic a = new System.Dynamic.ExpandoObject();
a.Name = "Name";
a.Address = "Address";
a.City = "City";
a.State = "State";
a.Zip = "Zip";
return Ok(a);
}
Если запрос в формате JSON, вы получите это:
{"Name":"Name","Address":"Address","City":"City","State":"State","Zip":"Zip"}
Если запрос является XML и больше ничего не меняется, вы получите это:
<ArrayOfKeyValueOfstringanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfstringanyType>
<Key>Name</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">Name</Value>
</KeyValueOfstringanyType>
<KeyValueOfstringanyType>
<Key>Address</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">Address</Value>
</KeyValueOfstringanyType>
<KeyValueOfstringanyType>
<Key>City</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">City</Value>
</KeyValueOfstringanyType>
<KeyValueOfstringanyType>
<Key>State</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">State</Value>
</KeyValueOfstringanyType>
<KeyValueOfstringanyType>
<Key>Zip</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">Zip</Value>
</KeyValueOfstringanyType>
</ArrayOfKeyValueOfstringanyType>
Вместо этого я бы ожидал что-то вроде этого:
<MyAPIController.MyClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/MyProject.Controllers">
<Name>Name</Name>
<Address>Address</Address>
<City>City</City>
<State>State</State>
<Zip>Zip</Zip>
</MyAPIController.MyClass>