0

私は C# が本当に苦手なので、次のことを手伝ってほしいです。現在、Json Array を WCF Web サービスに渡しています。json 配列を取得してリストに挿入する必要があります。C# でデシリアライズする方法がわかりません。これを達成するための最良の方法を教えてください。私のコードは次のようになります。

  public String UpdateOrderAddress(Stream userInfo)
  {
        try
        {               
           StreamReader reader = new StreamReader(userInfo);
           string JSONdata = reader.ReadToEnd();
           if (JSONdata == null)
           {                    
                return "null";
           }                        

           return JSONdata;     // Success !
        }
        catch (Exception e)
        {
            return e.ToString();
        }
  }

これは、リーダーから取得した文字列のデータです

[{"date":"2013-02-22 15:30:374:021","id":"1","description":"test","name":"test"},
"date":"2013-02-25 11:56:926:020","id":"2","description":"ghy","name":"fhh"},
"date":"2013-02-25 11:56:248:026","id":"3","description":"ghfm","name":"run"}]
4

3 に答える 3

2

あなたが投稿したコードは、json文字列をどのように逆シリアル化しようとしているのかを示していないため、ここでの関連性は実際にはわかりませんが、いずれにせよ、これはJSONを具体的なC#クラスに逆シリアル化する方法です.

  1. 次のように、Javascript オブジェクトの構造に一致するクラスを作成します。

    public class Data
    {
      public string  Date {get;set;}
      public int ID {get;set;}
      public string Description {get;set;}
      public string Name {get;set;}
    }
    
  2. 次のようにJavascriptSerializerを使用してデシリアライズします。

    var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(jsonString);
    

元の JSON 文字列の形式が正しくないことに注意してください。{配列の各要素の開口部がありません。それは本当にあるべきです:

[{"日付":"2013-02-22 15:30:374:021","id":"1","説明":"テスト","名前":"テスト"}, {"日付" :"2013-02-25 11:56:926:020","id":"2","説明":"ghy","名前":"fhh"}, {"日付":"2013-02 -25 11:56:248:026","id":"3","説明":"ghfm","名前":"実行"}]

ここで、上記を逆シリアル化しようとすると、次のようになります。

string json = @"[{""date"":""2013-02-22 15:30:374:021"",""id"":""1"",""description"":""test"",""name"":""test""},
   {""date"":""2013-02-25 11:56:926:020"",""id"":""2"",""description"":""ghy"",""name"":""fhh""},
   {""date"":""2013-02-25 11:56:248:026"",""id"":""3"",""description"":""ghfm"",""name"":""run""}]";

var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(json);

綺麗なList<Data>背中になります。

また、Javascript オブジェクトの対応するフィールドに DateTime フィールドを使用しなかったことにも注意してdateください。これは、サンプルの日付が有効な DateTime ではないか、少なくともDateTimeその文字列表現からオブジェクトを作成できないためです。たとえば、「15:30:374:021」は意味がありません。374 が秒フィールドだと思います...

JavascriptSerializer を使用できるようにするには、System.Web.Extensions への参照を追加する必要があります。

于 2013-02-26T15:30:29.447 に答える
0

Newtonsoft.Jsonライブラリを使用できます。あなたがする必要があるのは:

List<YourClass> yourClassList = JsonConvert.DeserializeObject<List<YourClass>>(JSONdata);

あなたはより多くの情報を見つけます、サンプルさえここにあります

于 2013-02-26T14:56:26.017 に答える
0

値を保持し、クラスを使用するために必要なプロパティを持つ代表的なクラスを作成できますJavascriptSerializer。タイプを指定してメソッドを呼び出し、Deserialize<T>JSON をコードに逆シリアル化します。

参照用のクラス名のリンク。

于 2013-02-26T14:52:46.647 に答える