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

本文关键字:一个 XElement xml 反序列化 | 更新日期: 2023-09-27 18:06:38

似乎张贴(HTTP POST)一个JSON的属性,其中包含一个xml片段将不能正确序列化,如果该属性是一个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是可以的。

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

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

Ref: .NET和JSON之间的DataType映射

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

但是,您可以通过在模型类中添加一些逻辑来实现这一点

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