反序列化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是可以的。
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