Angularjs 将Json发布到WebApi-反序列化到XmlNode

Angularjs 将Json发布到WebApi-反序列化到XmlNode,angularjs,asp.net-web-api,asp.net-web-api2,Angularjs,Asp.net Web Api,Asp.net Web Api2,我正在使用angular的$http.post发送一个JSON对象 除其他外,将填充Id值。但是,XmlNode属性不是反序列化的,而是空的。这个相同的配置实体被序列化为json而没有问题 如何正确地反序列化XmlNodes? 注意:我无法更改配置类。另外,我正在使用CamelCasePropertyNamesContractResolver Json格式化程序 Web Api控制器 配置类 Json数据: 编辑:我已经验证了在使用XmlDocument而不是XmlNode时,XML是否正确序列

我正在使用angular的$http.post发送一个JSON对象

除其他外,将填充Id值。但是,XmlNode属性不是反序列化的,而是空的。这个相同的配置实体被序列化为json而没有问题

如何正确地反序列化XmlNodes? 注意:我无法更改配置类。另外,我正在使用CamelCasePropertyNamesContractResolver Json格式化程序

Web Api控制器

配置类

Json数据:

编辑:我已经验证了在使用XmlDocument而不是XmlNode时,XML是否正确序列化。

我编写了一个自定义JsonConverter,将XmlNode转换为XmlDocument

将转换器添加到JsonFormatter.SerializerSettings

这是可行的,但看起来像是一个黑客。有更好的办法吗

[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; }
}
{
    "Id": "1",
    "configuration": {
        "Config": {
            "Settings": {
                "Setting": [
                    {
                        "@SettingId": "1",
                        "@Name": "DEFAULT"
                    }
                ]
            }
        }
    }
}
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();
    }
}
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new XmlNodeConverter());