2016-11-01 5 views
1

Newtonsoft.Jsonを使用して、ajaxに付属のjson文字列を解析しています。私のコンバート試みであることjson文字列をオブジェクトに変換する

{ 
"baslik" : "fff", 
"sorular": [{ 
    "soru1" : "1", 
    "soru2" : "2" 
}] 
} 

: はここに私のAjaxの文字列で、これは、任意のエラーを与えていないが、私はとして 'taslak' 取得

[WebMethod] 
public static string SoruKaydet(string form_taslak) 
{ 

    var taslak = JsonConvert.DeserializeObject<KeyValuePair<string, KeyValuePair<string, string>>>(form_taslak); 
} 

'{[、[、]]}' ..私は何をすべきか?最初の行は、文字列のKeyValuePairあるので、あなたはKeyValuePair<string, KeyValuePair<string, string>>を使用することはできません

+1

誤ったタイプを使用しています。 JSONの最初の行はKeyValuePair として表すことができますが、2番目の行はそうではありません。 – eocron

+1

は 'json2csharp.com'を使って強く型付けされた' C# 'オブジェクトを生成します。 –

答えて

2

は、もう一つは文字列とそれぞれがいくつかKeyPairValueを含むオブジェクトの配列のKeyValuePairです。
私はJSONをシリアル化するために、次の構造を使用することをお勧め:

public class Sorular 
{ 
    public string soru1 { get; set; } 
    public string soru2 { get; set; } 
} 

public class RootObject 
{ 
    public string baslik { get; set; } 
    public List<Sorular> sorular { get; set; } 
} 

EDIT
あなたは私の提案オブジェクトSorularになりますどのくらいのオブジェクトがわからない場合には、逆シリアル化のための動的オブジェクトを使用していますオブジェクト。このように:

dynamic o = JsonConvert.DeserializeObject(myJson); 
Console.WriteLine(o.sorular[0].soru2); 

このスニペットListの第一の目的でdynamic objectしてから表示soru2を作成することができます。
か、使用にこのクラスをデシリアライズする代わりに使用のRootObjectを動的に使用したくない場合:

public class SomeData 
{ 
    public string baslik { get; set; } 

    public IEnumerable<IDictionary<string, string>> sorular { get; set; } 
} 
+0

問題は、json配列 "sorular"にもっと多くの要素がある可能性があります.. soru1、soru2、soru3、soru4のようなもの...毎回変化する... –

+0

もちろんもちろん、リストは静的変数ではありません – Tinwor

+0

はい。ただし、Sorularには2つの属性があるため、リストには最初の2つの要素(soru1とsoru2)しか保持されません。 soru3にもajax文字列が付いていると、表示されません。 –

1

あなたは、このための適切なモデルを作成する必要があります。このような何か:

class MyModel{ 
    string baslik{set;get} 
    List<Dictionary<string,string>> sorular{set;get;} 
} 

次にメソッドに渡し:そのような

[WebMethod] 
public static string SoruKaydet(MyModel form_taslak) 
{  
    //use form_taslak here 
} 

何か。

+0

が編集されました。ご意見ありがとうございます。 – mojo

関連する問題