2017-08-28 8 views
0

私はC#プログラマーではなく、時にはその言語を使用しています。 JavaScriptSerializer.DeserializeObjectを使用して逆シリアル化したいJSON文字列があれば、どうすればいいのでしょうか。例えば、私はJSON持っている場合:JavaScriptSerializer.DeserializeObjectを使用してC#を逆シリアル化する

{ 
    "Name": "col_name2", 
    "Value": [ 
     { 
      "From": 100, 
      "To": 200 
     }, 
     { 
      "From": 100, 
      "To": 200 
     } 
    ] 
} 

を私は変数にJSON文字列がsJsonと呼ばれることがあります。

using System.Web.Script.Serialization; 
... 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
Object json = jss.DeserializeObject(sJson); 

、今、私はこのObject json変数を使うのですか?

注:私はすでにSystem.Web.Script.Serialization.Deserialize<T>メソッドを使用してそれを行う方法を知っています。あなたは、この特定のケースのための新しいカスタムクラスを宣言することができ

+0

この場合の結果は、ある項目のキーが ''名前 ''と値が '' col_name2 "'、 '"値 "'の項目の ''文字列、 'object []'の値で、json配列内の2つのオブジェクトを返します。デシリアライズするクラスをいくつか作成して、あなたの人生をもっと楽にしてください。 –

+0

ありがとうございます。確かにそれはあなたが言うように動作し、唯一のことは、オブジェクトjsonの代わりに私は動的json = jss.DeserializeObject(sJson)を使用する必要があるということです。それが私を止めていたものでした。 – vivanov

答えて

1

Sダービッツ回答のためのポスト:私が作成希望

JavaScriptSerializer jss = new JavaScriptSerializer(); 
dynamic json = jss.DeserializeObject(sJson); 
Console.WriteLine(json["Name"]); // use as Dictionary 

:あなたは、動的にそれを置くことができる

Deserialize json object into dynamic object using Json.net

(基本となる型はjオブジェクトである) 次に、あなたよりも、このような情報にアクセスすることができますデータ転送オブジェクト(DTO)はJSON構造をac#クラスとして表します。

+0

コードサンプルにはどこでJson.Netを使用していますか? –

+0

コンパイルされますが、実行時に例外がスローされます。 'System.Collections.Generic.Dictionary 'は、 'Name'の定義では ではありません。 – vivanov

+0

私はそれを理解しました。私はそれを次のように呼び出す必要があります。Console.WriteLine(json ["Name"]); – vivanov

0

:あなたが持っている。また場合

JavaScriptSerializer jss = new JavaScriptSerializer(); 
CustomClass json = (CustomClass)jss.Deserialize(sJson, typeof(CustomClass)); 

public class CustomClass 
{ 
    public string Name { get; set; } 
    public List<ValueClass> Value { get; set; } 
} 

public class ValueClass 
{ 
    public int From { get; set; } 
    public int To { get; set; } 
} 

そして、それらのクラス(デシリアライザは自動的に正しいプロパティをマップします)に直接デシリアライズ1つ以上の項目は、これも簡単です:

List<CustomClass> json = (List<CustomClass>)jss.Deserialize(sJson, typeof(List<CustomClass>)); 
関連する問題