如何从Xml原始字符串生成Xml或Json输出格式?

时间:2019-04-27 15:43:05

标签: c# json xml .net-core format

我正在尝试使用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不可接受

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>

有什么办法解决这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

似乎我想得太多...问题解决了。

        [HttpGet("values.{format}"), FormatFilter]
        public ActionResult TestObjectOutput()
        {
            string xml = DynamicXmlRawString();

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xml);

            return Ok(xmlDoc);
        }

        public static string DynamicXmlRawString()
        {
            return $@"<Result><DateTime>{DateTime.Now}</DateTime><User><Someone>12345678</Someone></User></Result>";
        }