将json字符串转换为对象

时间:2016-11-01 11:15:36

标签: c# json json.net

我使用Newtonsoft.Json来解析ajax附带的json字符串。 这是我的ajax字符串:

{ 
 "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'改为'{[,[,]]}'..我该怎么办?

2 个答案:

答案 0 :(得分:2)

您不能使用KeyValuePair<string, KeyValuePair<string, string>>,因为第一行是KeyValuePair字符串,第二行是KeyValuePair字符串和对象数组,每一行包含一些KeyPairValue。
我建议使用以下结构来序列化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,然后在soru2的第一个对象中显示List
或者,如果您不想使用动态而不是使用RootObject反序列化使用此类:

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

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

答案 1 :(得分: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
}

类似的东西。