में परिभाषित करने के लिए json स्ट्रिंग और नक्शा गुण को क्रमानुसार मैं निम्नलिखित JSON स्ट्रिंग है:Json.NET deserialize या अलग संपत्ति के नाम क्रम
public class Details
{
public string property1 { get; set; }
public string property2 { get; set; }
public string property3 { get; set; }
public int property4 { get; set; }
}
public class Values
{
public Details details { get; set; }
public int count { get; set; }
}
public class RootObject
{
public Values values { get; set; }
}
:
{
"values": {
"details": {
"property1": "94",
"property2": "47",
"property3": "32",
"property4": 1
},
count: 4
}
}
मैं निम्नलिखित मॉडल के लिए इस मैप करने के लिए जा रहा हूँ
JsonConvert.DeserializeObject<RootObject>(jsonString);
:
मैं जब इस तरह इस JSON स्ट्रिंग deserializing कार्यावधि में अलग-अलग नामों के लिए इन संपत्ति के नाम मैप करने के लिए सक्षम होना चाहते हैं
उदाहरण के लिए, deserialization प्रक्रिया में, मैं "property1" का नाम "differen_property_name1" या "differen_property_name2" या "differen_property_name3" को deserialize करना चाहता हूँ। क्योंकि मैं क्रम में नए नाम का चयन कर रहा हूँ (नया नाम जो मैं करने के लिए "property1" नाम बदलने के लिए होगा), मैं, समाधान JsonPropertyAttribute का उपयोग कर उपयोग नहीं कर सकते, जैसा कि यहाँ का सुझाव दिया:
.NET NewtonSoft JSON deserialize map to a different property name
उपर्युक्त प्रश्न (जैक का उत्तर) के उत्तरों में से एक डिफ़ॉल्ट कंट्रैक्ट रिसेल्वर की विरासत का उपयोग करता है लेकिन यह उस मामले में काम नहीं कर रहा है।
अद्यतन
बाद में, मैं वस्तु मैं अक्रमांकन से मिला क्रमानुसार और विभिन्न संपत्ति के नाम, क्रम में परिभाषित करने के लिए गुण मैप करने के लिए की जरूरत है। मैं एक ही विधि का इस्तेमाल किया के रूप में ब्रायन क्रमबद्धता करने के लिए प्रस्तावित:
मैं अपने नए संपत्ति के नाम को मैप करने के शब्दकोश का प्रयोग किया:
var map = new Dictionary<Type, Dictionary<string, string>>
{
{
typeof(Details),
new Dictionary<string, string>
{
{"property1", "myNewPropertyName1"},
{"property2", "myNewPropertyName2"},
{"property3", "myNewPropertyName3"},
{"property4", "myNewPropertyName4"}
}
}
};
और फिर मैं ब्रायन की DynamicMappingResolver इस्तेमाल किया इस तरह वस्तु को क्रमानुसार करने:
var settings = new JsonSerializerSettings
{
ContractResolver = new DynamicMappingResolver(map)
};
var root = JsonConvert.SerializeObject(myObjectInstance, settings);
क्योंकि मैं क्रम जो नया नाम मैं संपत्ति के लिए और JsonPropertyAttribute साथ आप एक "हार्ड कोडित" नाम का उपयोग करना देना चाहता हूँ में तय करना चाहते हैं। –
एक तरीका (हालांकि यह बदसूरत हो सकता है) पहले JSON को deserialize करना होगा, और फिर नए नामों के साथ वस्तु को deserialized वस्तु मानचित्र। हालांकि, एक और अधिक सुरुचिपूर्ण तरीका हो सकता है। – Tim
@Tim, नए नामों के साथ किसी ऑब्जेक्ट पर deserialized ऑब्जेक्ट को कैसे मैप किया जाएगा जब नए नाम रनटाइम पर परिभाषित किए जाने की आवश्यकता है? –