我正在使用angular $http.post()
发送一个JSON对象。
填充Id值等。但是,XmlNode属性不是反序列化,并且为null。这个相同的配置实体被序列化为json而没有问题。
注意:我无法更改配置类。另外,我正在使用CamelCasePropertyNamesContractResolver Json Formatter。
网络Api控制器
[Route("api/config/{Id}")]
[HttpPut]
public IHttpActionResult Save(Guid Id, Configuration config)
{
... config.Configuration is null ...
return Ok();
}
配置类
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"
}
]
}
}
}
}
编辑:我已经验证了在使用XmlDocument而不是XmlNode时XML正确序列化。
答案 0 :(得分:0)
我写了一个自定义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());
这很有效,但看起来像是黑客。还有更好的方法吗?