मैं अपने JSON आउटपुट में गुणों के क्रम को कैसे नियंत्रित करूं?


6

मेरे पास डेटा इटैम नामक एक वर्ग है, जिसमें तीन गुण हैं: आईडी, डेटावैल्यू और निर्मितडेट टाइम। संपत्तियों को उस क्रम में कक्षा से ऊपर से नीचे तक परिभाषित किया जाता है। यह भी आदेश है कि मैं अपने JSON निर्यात में गुण देखना चाहता हूं। समस्या DataItem ऑब्जेक्ट में गुण है और JSON निर्यात में वर्णानुक्रम में क्रमबद्ध किया गया है। यद्यपि इस प्रारूप के साथ तकनीकी रूप से गलत कुछ भी नहीं है, यह पठनीयता की बात है। मैं JSON निर्यात में गुणों के क्रम को कैसे नियंत्रित करूं?

मैंने डेटा की जांच की है Item wen instantiated और गुण वर्णमाला क्रम में सूचीबद्ध हैं। यह ठीक है, मैं गुणों को वर्णानुक्रमित नहीं करने के संभावित प्रयोज्य मुद्दों को समझता हूं।

public static List<DataItem>GetAllDataItems() 
     { 
      List<DataItem> dataItems = new List<DataItem>(); 

      SqlConnection conn = NetduinoDb.GetConnection(); 

      SqlCommand cmd = conn.CreateCommand(); 

      cmd.CommandText = "Select Id, DataValue, CreatedDateTime from XXX"; 
      cmd.CommandType = CommandType.Text; 

      conn.Open(); 

      SqlDataReader reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       DataItem dataItem = new DataItem 
       { 
        Id = reader["Id"].ToString(), 
        DataValue = reader["DataValue"].ToString(), 
        CreatedDateTime = reader["CreatedDateTime"].ToString() 
       }; 

       dataItems.Add(dataItem); 
      } 

      reader.Close(); 
      conn.Close(); 


      return dataItems.ToList(); 
     } 

इस विधि मेरी सेवा कार्यान्वयन में है और DataItems की सूची देता है। मुझे लगता है कि मुझे यहां कुछ करने की ज़रूरत है लेकिन यह सुनिश्चित नहीं है कि क्या या कैसे।

public List<DataItem> GetCollection() 
{ 
    return DataRetriever.GetAllDataItems(); 
} 
  0

आप हमें बहुत सारे अप्रासंगिक कोड क्यों दिखा रहे हैं और महत्वपूर्ण कोड नहीं दिखाते हैं, यानी जहां आप अपनी ऑब्जेक्ट JSON पर क्रमबद्ध करते हैं? इसके अलावा, आदेश आपके लिए क्यों मायने रखता है? जेएसओएन मुख्य रूप से मनुष्यों द्वारा नहीं, अन्य कार्यक्रमों द्वारा पढ़ा जाना है। 15 feb. 122012-02-15 02:46:54

  0

@svick - दिखाने के लिए बहुत कुछ कोड नहीं है। चाहे यह प्रासंगिक है या नहीं, हमारे पास यही है। मैं कुछ भी क्रमबद्ध नहीं कर रहा हूं इसलिए वहां दिखाने के लिए कुछ नहीं। जहां तक ​​आदेश है, वही है जो हम चाहते हैं। डब्ल्यूसीएफ आरईएसटी मल्टी-प्रोजेक्ट टेम्पलेट पर एक नज़र डालें क्योंकि यह मूल रूप से हम कर रहे हैं। 15 feb. 122012-02-15 03:26:07

+1

[डब्ल्यूसीएफ डेटाकंट्रैक्ट डेटामेम्बर ऑर्डर का संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/3816478/wcf-datacontract-datamember-order) 25 jun. 152015-06-25 13:57:23

17

DataContractJsonSerializerDataMember विशेषता पर विचार करता है जिसमें Order संपत्ति है। आप धारावाहिक को उन सदस्यों के आदेश को बताने के लिए इसका उपयोग कर सकते हैं जिन्हें आप क्रमबद्ध करना चाहते हैं।

[DataContract] 
class DataItem 
{ 
    [DataMember(Order = 1)] 
    public string Id { get; set; } 

    [DataMember(Order = 2)] 
    public string DataValue { get; set; } 

    [DataMember(Order = 3)] 
    public string CreatedDateTime { get; set; } 
} 

आवश्यकतानुसार आदेश समायोजित करें, लेकिन आमतौर पर यह डब्ल्यूसीएफ में कैसे किया जाता है।

+1

अच्छा, आसान समाधान। धन्यवाद! कक्षा नाम के ऊपर 16 feb. 122012-02-16 00:37:39

+1

[डेटाकंट्रैक्ट] आवश्यक है। धन्यवाद 17 may. 162016-05-17 20:13:06


1

मुझे नहीं लगता कि DataContractJsonSerializer और JSON.NET दोनों फ़ील्ड ऑर्डर का समर्थन करता है।

यदि ऑब्जेक्ट केवल 3 फ़ील्ड के रूप में सरल है तो आप JSON स्ट्रिंग स्वयं बना सकते हैं।