Как заставить ASP.NET Web API 2 равномерно сериализовать один и тот же динамический объект C # с запросами JSON и XML? - PullRequest
0 голосов
/ 02 мая 2019

В двух словах, как мне кодировать метод контроллера 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>
...