मैं json.net (न्यूटनसॉफ्ट के जेसनसेरियलाइज़र) का उपयोग कर रहा हूं। मुझे निम्नलिखित आवश्यकताओं को पूरा करने के लिए क्रमबद्धता को अनुकूलित करने की आवश्यकता है:न्यूटॉन्सॉफ्ट जेसनसेरियलाइज़र - लोअर केस गुण और शब्दकोश
- संपत्ति नाम कम केस अक्षर से शुरू होना चाहिए।
- शब्दकोश jsonp में क्रमबद्ध होना चाहिए जहां कुंजी नाम संपत्ति के नामों के लिए उपयोग किया जाएगा। लोअरकेस नियम शब्दकोश कुंजी के लिए लागू नहीं होता है।
var product = new Product(); procuct.Name = "Product1"; product.Items = new Dictionary<string, Item>(); product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
में क्रमानुसार चाहिए::
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
सूचना है कि संपत्ति का नाम "नाम" में धारावाहिक करता है, लेकिन कुंजी आइटम 1 "आइटम 1" में धारावाहिक करता है;
मैंने कस्टम नामों को क्रमबद्ध करने के लिए कस्टमजेसनवाइटर बनाने की कोशिश की है, लेकिन यह डिकोनरी कुंजी भी बदलती है।
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer) : base(writer)
{
}
public override void WritePropertyName(string name, bool escape)
{
if (name != "$type")
{
name = name.ToCamelCase();
}
base.WritePropertyName(name, escape);
}
}
यह उल्लंघन नहीं है। यह एक मैपिंग प्रदान करता है जो डेटा क्रमबद्धता से निपटने के दौरान आवश्यक हो सकता है। यह सी # परिवर्तनीय नामों और अंतर्निहित धारावाहिक प्रारूप के बीच मेल नहीं खा रहा है - जेएसओएन तक ही सीमित नहीं है। – Metro
अच्छी तरह से, यदि कोई नियम या सम्मेलन है जिसका उपयोग मैपिंग निर्धारित करने के लिए किया जा सकता है, तो यह DRY – Liero
का उल्लंघन है। डीआरवाई सिद्धांत के रूप में कहा गया है "ज्ञान के हर हिस्से में एक प्रणाली के भीतर एक एकल, स्पष्ट, आधिकारिक प्रतिनिधित्व होना चाहिए। किसी सिस्टम के किसी एकल तत्व के लिए अन्य तर्कसंगत असंबंधित तत्वों में परिवर्तन की आवश्यकता नहीं होती है। इसके अतिरिक्त, तत्व जो तर्कसंगत रूप से सभी परिवर्तनों से संबंधित हैं और समान रूप से संबंधित हैं, और इस प्रकार सिंक में रखा जाता है। " – Liero