Hom*_*mer 7 formatting xml-serialization json.net
如何让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()
});
Run Code Online (Sandbox Code Playgroud)
Mat*_*cic 10
制作XML数据模型
例
public class MyClass
{
[JsonProperty("@SomeXMLProperty")]
public string MyString{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后将XML反序列化到您的模型
XDocument xmlDocument = XDocument.Parse(xmlData);
string jsonData = JsonConvert.SerializeXNode(xmlDocument);
var myClass = JsonConvert.DeserializeObject<MyClass>(jsonData);
Run Code Online (Sandbox Code Playgroud)
然后只使用CamelCasePropertyNamesContractResolver和Formatting.Indented
string json = JsonConvert.SerializeObject(rootObject,
Newtonsoft.Json.Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() });
Run Code Online (Sandbox Code Playgroud)
更新:
第一个解决方案简单而干净(无需编写自定义解析器等).这只是用于删除@符号
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);
Run Code Online (Sandbox Code Playgroud)
如果有人知道两个案例的更好的解决方案,那么第一个看它会很好.
WebAPI的补充
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7588 次 |
最近记录: |