我有一个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>