反序列化的xml给出了一个空的XElement

时间:2015-08-05 23:28:48

标签: c# json xml asp.net-web-api

似乎发布(HTTP POST)带有包含xml片段的属性的JSON如果该属性是我班级中的XElement,则不会正确序列化。这是一个例子:

public class MYController : ApiController
    {
        public MyClass Post(MyClass postedObject)
        {
            return postedObject;
        }
    }

public class MyClass
{
    public DateTime MyDate { get; set; }
    public XElement MyXml{ get; set; }
}

发送的javascript对象是:

{
  "MyDate" : "2012-12-01T12:00:00", 
  "MyXml" : "<node ln=\"node\" nm=\"1\" /><node ln=\"node\" nm=\"2\" />" 
}

出于某种原因,XElement始终为null,但DateTime没有问题。

1 个答案:

答案 0 :(得分:1)

Web Api可能会使用JSON.NET序列化程序将发布的JSON数据解析为.NET类对象; JSON序列化程序只能将JSON数据类型映射到C#DataTypes,这意味着,json数据中的XML字符串将使用C#字符串数据类型进行映射。

参考:DataType mappings between .NET and JSON

因此,在HTTP post请求期间,您无法将XML字符串值转换为XElement。

但是,您可以通过在Model Class中添加一些逻辑来实现这一目标

public class MyClass
{
    public DateTime MyDate { get; set; }

    public string MyXml
    {
        set
        {
            //XML element should contain only one root element
            //<MyXml> element act as root element
            string myXml = "<myXml>"+ value +"</myXml>";
            RootXml = XElement.Parse(myXml);
        }
    }

    public XElement RootXml;

}  

- SJ