如何让 JSON.Net 将我的 XML 序列化为驼峰式 JSON 并且不使用“@”?
这是我目前拥有的,但它在属性前面加上@,而不是驼峰式大小写...
XmlDocument doc = new XmlDocument();
doc.LoadXml(myXmlString);
string jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(doc, new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
为您的 XML 数据制作模型
例子
public class MyClass
{
[JsonProperty("@SomeXMLProperty")]
public string MyString{ get; set; }
}
然后将 XML 反序列化为您的模型
XDocument xmlDocument = XDocument.Parse(xmlData);
string jsonData = JsonConvert.SerializeXNode(xmlDocument);
var myClass = JsonConvert.DeserializeObject<MyClass>(jsonData);
然后只需使用 CamelCasePropertyNamesContractResolver 和 Formatting.Indented
string json = JsonConvert.SerializeObject(rootObject,
Newtonsoft.Json.Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() });
更新:
第一个解决方案简单干净(不需要编写自定义解析器等)这只是为了删除@符号
var xml = new XmlDocument();
xml.XmlResolver = null;
xml.Load("yourfilehere");
var json = JsonConvert.SerializeXmlNode(xml, Newtonsoft.Json.Formatting.Indented);
var withoutATSign = System.Text.RegularExpressions.Regex.Replace(json, "(?<=\")(@)(?!.*\":\\s )", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
如果有人知道这两种情况的更好解决方案,那么第一种情况会很高兴。
WebAPI 添加
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
我是一名优秀的程序员,十分优秀!