将 Json 发布到 WebApi - 反序列化到 XmlNode
Posting Json to WebApi - deserializing to XmlNode
我正在使用 angular 的 $http.post()
发送一个 JSON 对象。
填充了 Id 值等。但是,XmlNode 属性不是反序列化的,而是空的。同样的配置实体被序列化为 json 没有问题。
如何正确反序列化 XmlNode?
注意:我无法更改配置class。此外,我正在使用 CamelCasePropertyNamesContractResolver Json 格式化程序。
Web Api 控制器
[Route("api/config/{Id}")]
[HttpPut]
public IHttpActionResult Save(Guid Id, Configuration config)
{
... config.Configuration is null ...
return Ok();
}
配置Class
public class Configuration {
public string Id { get; private set; }
public XmlNode Configuration { get; private set; }
}
Json数据:
{
"Id": "1",
"configuration": {
"Config": {
"Settings": {
"Setting": [
{
"@SettingId": "1",
"@Name": "DEFAULT"
}
]
}
}
}
}
编辑:我已验证 XML 在使用 XmlDocument 而不是 XmlNode 时正确序列化。
我编写了一个自定义 JsonConverter
将 XmlNode
转换为 XmlDocument
。
public class XmlNodeConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(XmlNode);
}
public override bool CanRead
{
get
{
return true;
}
}
public override bool CanWrite
{
get
{
return false;
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jsonObject = JObject.Load(reader);
XmlDocument document = JsonConvert.DeserializeXmlNode(jsonObject.ToString());
return document;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
将转换器添加到 JsonFormatter.SerializerSettings
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new XmlNodeConverter());
这行得通,但似乎有问题。有没有更好的方法?
我正在使用 angular 的 $http.post()
发送一个 JSON 对象。
填充了 Id 值等。但是,XmlNode 属性不是反序列化的,而是空的。同样的配置实体被序列化为 json 没有问题。
如何正确反序列化 XmlNode?
注意:我无法更改配置class。此外,我正在使用 CamelCasePropertyNamesContractResolver Json 格式化程序。
Web Api 控制器
[Route("api/config/{Id}")]
[HttpPut]
public IHttpActionResult Save(Guid Id, Configuration config)
{
... config.Configuration is null ...
return Ok();
}
配置Class
public class Configuration {
public string Id { get; private set; }
public XmlNode Configuration { get; private set; }
}
Json数据:
{
"Id": "1",
"configuration": {
"Config": {
"Settings": {
"Setting": [
{
"@SettingId": "1",
"@Name": "DEFAULT"
}
]
}
}
}
}
编辑:我已验证 XML 在使用 XmlDocument 而不是 XmlNode 时正确序列化。
我编写了一个自定义 JsonConverter
将 XmlNode
转换为 XmlDocument
。
public class XmlNodeConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(XmlNode);
}
public override bool CanRead
{
get
{
return true;
}
}
public override bool CanWrite
{
get
{
return false;
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jsonObject = JObject.Load(reader);
XmlDocument document = JsonConvert.DeserializeXmlNode(jsonObject.ToString());
return document;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
将转换器添加到 JsonFormatter.SerializerSettings
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new XmlNodeConverter());
这行得通,但似乎有问题。有没有更好的方法?