将 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 时正确序列化。

我编写了一个自定义 JsonConverterXmlNode 转换为 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());

这行得通,但似乎有问题。有没有更好的方法?