2012-02-15 20 views
6

Id、DataValue、およびCreatedDateTimeの3つのプロパティを持つDataItemという名前のクラスがあります。プロパティは、上から下の順にクラス内で定義されます。これは、JSONエクスポートのプロパティを表示する順序です。問題はDataItemオブジェクトとJSONエクスポートのプロパティがアルファベット順にソートされていることです。このフォーマットには技術的に間違ったことはありませんが、それは読みやすさの問題です.JSONのエクスポートでプロパティの順序を制御するにはどうすればよいですか?JSON出力のプロパティの順序を制御するにはどうすればよいですか?

インスタンス化されたdataItemがチェックされ、プロパティがアルファベット順にリストされています。これは大丈夫です、私は、アルファベット順のプロパティをソートしないというユーザビリティの潜在的な問題を理解しています。

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

このメソッドはサービス実装であり、DataItemのリストを返します。私はここで何かをする必要があると思っていますが、何がどのようにするかはわかりません。

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

なぜ無関係のコードがたくさん表示され、重要なコード(JSONにオブジェクトをシリアル化する場所)が表示されないのですか?また、注文はなぜあなたにとって重要なのでしょうか? JSONは主に、人間ではなく他のプログラムによって読み込まれることを意図しています。 – svick

+0

@svick - 表示するコードはあまりありません。それが関連しているかどうかにかかわらず、それは私たちが持っているものです。私はそこに何も見せないために何かを連載していません。注文に関する限り、それは私たちが欲しいものです。基本的にはWCF RESTマルチプロジェクトテンプレートを見てください。 – DenaliHardtail

+1

[WCF DataContract DataMember order?]の可能な複製?(http://stackoverflow.com/questions/3816478/wcf-datacontract-datamember-order) – JNF

答えて

17

DataContractJsonSerializerは、Order属性を持つDataMember属性を考慮しています。シリアル化するメンバーの順序をシリアライザに伝えるために使用することができます。

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

必要に応じて順序を調整しますが、これはそれがWCFで行われている方法が一般的です。

+1

ニース、簡単な解決策。ありがとうございました! – DenaliHardtail

+1

上記の[DataContract]クラス名は必須です。ありがとう – Ashok

1

DataContractJsonSerializerとJSON.NETの両方でフィールドの順序がサポートされているとは限りません。

Objectが3つのフィールドを持つような単純な場合は、JSON文字列を自分で作成できます。

関連する問題