2016-11-01 200 views
1

我使用Newtonsoft.Json來解析json字符串,它帶有ajax。 這裏是我的ajax字符串:將json字符串轉換爲對象

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

這是我的轉換嘗試:

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

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

它不給予任何錯誤,但我得到 'taslak' 爲 '{[,[,]}' ..我該怎麼辦?

+1

您正在使用不正確的類型。 JSON中的第一行可以表示爲KeyValuePair ,但第二行不是。 – eocron

+1

使用'json2csharp.com'來生成強類型的'C#'對象。 –

回答

2

不能使用KeyValuePair<string, KeyValuePair<string, string>>因爲第一行是一個字符串KeyValuePair,第二個是字符串對象的數組,每個一個包含一些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; } 
} 

編輯
如果你不知道有多少對象將在Sorular反對我的建議是使用動態對象反序列化目的。像這樣:

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

此代碼段允許創建dynamic object,然後在List的第一目的顯示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有兩個屬性,所以列表只包含前兩個元素(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