【发布时间】:2019-04-27 15:43:04
【问题描述】:
我正在尝试使用 FormatFilter 来生成 'json' 或 'xml' 控制器响应输出。
问题是我的起点是一个随机的(格式良好的)xml 字符串。
我正在使用 DotNet Core 2.2,这就是我现在在控制器中所拥有的:
[HttpGet("values.{format}"), FormatFilter]
public ActionResult TestObjectOutput()
{
string xml = DynamicXmlRawString();
XDocument doc = XDocument.Parse(xml);
string json = JsonConvert.SerializeXNode(doc);
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);
return Ok(obj);
}
public static string DynamicXmlRawString()
{
return $@"<Result><DateTime>{DateTime.Now}</DateTime><User><Someone>12345678</Someone></User></Result>";
}
json 的输出响应如期而至。
$ curl -i -X GET http://0.0.0.0:5000/api/values/object.json
{"Result":{"DateTime":"27/04/2019 16:31:27","User":{"Someone":"12345678"}}}
xml 的响应返回 HTTP/1.1 406 Not Acceptable
curl -i -X GET http://0.0.0.0:5000/api/values/object.xml
服务器错误:
An error occurred while trying to create an XmlSerializer for the type 'System.Dynamic.ExpandoObject'.
预期结果:
<Result><DateTime>27/04/2019 16:40:05</DateTime><User><Someone>12345678</Someone></User></Result>
知道如何解决这个问题吗?
谢谢
【问题讨论】:
-
你能用模型类(代表XML)代替ExpandoObject吗?比如动态obj = JsonConvert.DeserializeObject
(json); -
不,因为它是一个“匿名”xml 文档。我事先不知道xml架构。
标签: c# json xml .net-core format