LowercaseContractResolver()永远不会生效

时间:2019-05-14 12:59:07

标签: c# json.net

我有一个JSON字符串,我试图将其反序列化为XMLNode。最重要的是,我试图将属性更改为小写。   当我实现LowercaseContractResolver()时,它似乎没有生效。

代码

XmlDocument doc = JsonExtensions.DeserializeXmlNode(Params.Member, "Members", "Member");

增强

public static partial class JsonExtensions
{
    public static XmlDocument DeserializeXmlNode(string json, string rootName, string rootPropertyName)
    {
        return DeserializeXmlNode(new StringReader(json), rootName, rootPropertyName);
    }

    public static XmlDocument DeserializeXmlNode(TextReader textReader, string rootName, string rootPropertyName)
    {
        var prefix = "{" + JsonConvert.SerializeObject(rootPropertyName) + ":";
        var postfix = "}";

        using (var combinedReader = new StringReader(prefix).Concat(textReader).Concat(new StringReader(postfix)))
        {
            var settings = new JsonSerializerSettings
            {
                ContractResolver = new LowercaseContractResolver(),
                Converters = { new Newtonsoft.Json.Converters.XmlNodeConverter() { DeserializeRootElementName = rootName } },
                DateParseHandling = DateParseHandling.None,
            };
            using (var jsonReader = new JsonTextReader(combinedReader) { CloseInput = false, DateParseHandling = DateParseHandling.None })
            {
                return JsonSerializer.CreateDefault(settings).Deserialize<XmlDocument>(jsonReader);
            }
        }
    }
}

LowercaseContractResolver

public class LowercaseContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        return propertyName.ToLower();
    }
}

JSON字符串

[{"Id":0,"BorrowId":"BY1000"}] // Minimized for brevity

输出JSON

<Members><Member><Id>0</Id><BorrowId>BY1000</BorrowId></Member></Members>

0 个答案:

没有答案