2016-11-01 74 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