2013-03-05 7 views
6

मैं अपने एक्सएमएल को ऊंट केस जेएसओएन और "@" के बिना क्रमबद्ध करने के लिए JSON.Net कैसे प्राप्त करूं?JSON.Net जेएसओएन ऊंट मामले में XML को क्रमबद्ध करें

इस

मैं वर्तमान में क्या है, लेकिन यह गुणों के @ पहले जोड़ता है और मामले ऊंट नहीं करता है ...

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() 
}); 

उत्तर

10

अपने XML डेटा का एक मॉडल

उदाहरण बनाने

public class MyClass 
    { 
     [JsonProperty("@SomeXMLProperty")] 
     public string MyString{ get; set; } 
    } 

फिर अपने मॉडल

XDocument xmlDocument = XDocument.Parse(xmlData); 
string jsonData = JsonConvert.SerializeXNode(xmlDocument); 
var myClass = JsonConvert.DeserializeObject<MyClass>(jsonData); 
पर XML को deserialize करें

तो बस 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); 

यदि कोई व्यक्ति जानता है दोनों मामलों के लिए टटर समाधान तो पहले इसे देखना अच्छा लगेगा।

वेबएपीआई अलावा

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
+0

आप तो क्रमानुसार करने उसके बाद फिर से क्रमानुसार deserialize कह रहे हैं? – Homer

+0

हां पहला समाधान सबसे साफ है। क्या आप शायद वेबएपीआई का उपयोग कर रहे हैं और ऊंट के मामले की आवश्यकता है? यदि ऐसा है, तो यह केवल दो लाइनें है। –

संबंधित मुद्दे