Я пытаюсь выяснить способ возврата пользовательской полезной нагрузки с кодом возврата 200 вместо ASP.NET WebApi. В основном я хочу, чтобы иметьHttpError с пользовательской полезной нагрузкой в WebApi
{"status":{"code":"40001", "message": "Field XXX can not be empty"}}
и
<status><code>40001</code><message>Field XXX can not be empty</message></status>
Я делаю это с помощью HttpError
класса, добавив Dictionary
с rerquired полезной нагрузки. Он отлично работает для JSON, но не подходит для XML, и, как я понимаю, это сводится к XmlSerializer
и HttpError
, не играя красиво.
Вот короткий фрагмент кода, чтобы точно воспроизвести ту же ошибку:
var error = new HttpError();
var status = new Dictionary<string, string>
{
{"code", "40001"},
{"text", "Field XXX can not be empty"}
};
error.Add("status", status);
var ser = new XmlSerializer(error.GetType());
StringWriter strWriter = new StringWriter();
ser.Serialize(strWriter, error);
В этом случае я получаю Xml type 'xdt:untypedAtomic' does not support a conversion from Clr type 'KeyValuePair 2' to Clr type 'String'
Следующим шагом является понять, что KeyValuePair
не serializeable, и создать отдельный класс :
[XmlType(TypeName="Status")]
public class ResponseStatus
{
public ResponseStatus(){}
public String Code
{ get; set; }
public String Text
{ get; set; }
}
, который сам по себе сериализуется просто отлично, но бросает такое же исключение, если используется внутри HttpError: Xml type 'List of xdt:untypedAtomic' does not support a conversion from Clr type 'ResponseStatus' to Clr type 'String'.
Я не верю, что никто этого не делал раньше, поэтому мне интересно, чего мне не хватает?
Хорошо, я модифицировал начальный вопрос. Сериализация строк работает, но мне нужны эти ключи, которые можно обернуть в поле «статус». В этом случае сериализация не выполняется –