Làm cách nào để kiểm soát thứ tự các thuộc tính trong đầu ra JSON của tôi?


6

Tôi có một lớp, có tên là DataItem, với ba thuộc tính: Id, DataValue và CreatedDateTime. Các thuộc tính được định nghĩa trong lớp theo thứ tự từ trên xuống dưới. Đây cũng là thứ tự tôi muốn xem các thuộc tính trong xuất JSON của tôi. Vấn đề là các thuộc tính trong đối tượng DataItem và trong việc xuất JSON được sắp xếp theo thứ tự bảng chữ cái. Mặc dù không có gì sai về mặt kỹ thuật với định dạng này, nhưng đó là vấn đề dễ đọc. Làm cách nào để kiểm soát thứ tự các thuộc tính trong xuất JSON?

Tôi đã kiểm tra dataItem wen được khởi tạo và các thuộc tính được liệt kê theo thứ tự bảng chữ cái. Điều này là không sao, tôi hiểu các vấn đề khả năng sử dụng tiềm năng của việc không sắp xếp các thuộc tính theo thứ tự bảng chữ cái.

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

Phương pháp này đang trong quá trình triển khai dịch vụ của tôi và trả về danh sách DataItems. Tôi nghĩ rằng tôi cần phải làm một cái gì đó ở đây nhưng không chắc chắn những gì hoặc làm thế nào.

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

Tại sao bạn hiển thị cho chúng tôi nhiều mã không có liên quan và không hiển thị mã quan trọng, tức là bạn sắp xếp thứ tự đối tượng của mình vào JSON ở đâu? Ngoài ra, tại sao đơn đặt hàng lại quan trọng với bạn? JSON chủ yếu có nghĩa là được đọc bởi các chương trình khác, không phải bởi con người. 15 feb. 122012-02-15 02:46:54

  0

@svick - Không có nhiều mã để hiển thị. Cho dù nó có liên quan hay không, đó là những gì chúng ta có. Tôi không sắp xếp bất cứ thứ gì nên không có gì để hiển thị ở đó. Theo thứ tự, đó chỉ là những gì chúng tôi muốn. Hãy xem mẫu WCF REST Multi-Project vì đó là cơ bản những gì chúng tôi đang làm. 15 feb. 122012-02-15 03:26:07

+1

bản sao có thể có của [Lệnh WCF DataContract DataMember?] (Http://stackoverflow.com/questions/3816478/wcf-datacontract-datamember-order) 25 jun. 152015-06-25 13:57:23

17

DataContractJsonSerializer xem xét thuộc tính DataMember có thuộc tính Order. Bạn có thể sử dụng nó để nói cho serializer thứ tự của các thành viên bạn muốn serialized.

[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; } 
} 

Điều chỉnh thứ tự nếu cần, nhưng điều này thường được thực hiện trong WCF.

+1

Giải pháp dễ dàng, dễ dàng. Cảm ơn bạn! 16 feb. 122012-02-16 00:37:39

+1

[DataContract] ở trên Tên lớp là phải. Cảm ơn 17 may. 162016-05-17 20:13:06


1

Tôi không nghĩ cả DataContractJsonSerializer và JSON.NET đều hỗ trợ thứ tự trường.

Bạn có thể tự xây dựng chuỗi JSON nếu Object đơn giản như chỉ có 3 trường.