似乎发布(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没有问题。
答案 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