如何在C#中使用DataContractJsonSerializer处理这个简单的JSON字符串?

如何在C#中使用DataContractJsonSerializer处理这个简单的JSON字符串?,c#,arrays,json,C#,Arrays,Json,从API返回的JSON字符串: {"status":0,"data":{"respondents":[{"date_modified":"2015-05-18 19:08:07","respondent_id":"3973604066"},{"date_modified":"2015-05-11 20:00:30","respondent_id":"3958700049"}],"page":1,"page_size":1000}} 如果这是XML,我将使用LINQ并将其存储为列表中的列表 我确

从API返回的JSON字符串:

{"status":0,"data":{"respondents":[{"date_modified":"2015-05-18 19:08:07","respondent_id":"3973604066"},{"date_modified":"2015-05-11 20:00:30","respondent_id":"3958700049"}],"page":1,"page_size":1000}}
如果这是XML,我将使用LINQ并将其存储为列表中的列表

我确信,如果我能得到一个如何处理这个问题的答案,我可以将它应用到更高的层次

我正在使用.NET3.5或4.0

如果不通过CCB,我无法安装Json.Net

谢谢

这是我的代码:

班级计划 {

公共类状态OBJ
{
公共int状态{get;set;}
公共列表数据{get;set;}
}
公共类数据对象
{
公共列表应答者{get;set;}
公共整型页{get;set;}
公共整型页面大小{get;set;}
}
公共类响应对象
{
public DateTime date_modified{get;set;}
public int_id{get;set;}
}
静态void Main(字符串[]参数)
{
Console.WriteLine(DateTime.Now.ToString());
WriteLine(“拉WSDL”);
//删除了API拉,因为我没有问题
var reader=新的StreamReader(responseStream,Encoding.UTF8);
返回的字符串json_=reader.ReadToEnd();
//“{”状态\“:0,\”数据\“:{”应答者\“:[{”修改日期\“:“2015-05-18 19:08:07\”,“应答者id\”:“3973604066\”,{”修改日期\“:“2015-05-11 20:00:30\,“应答者id\”:“3958700049\”,“第1页”,“第1000页”;
Console.WriteLine(返回json_);
//这就是科迪的建议
var反序列化器=新的JavaScriptSerializer();
var results=反序列化器。反序列化(返回json_);
foreach(results.data中的var x)
{
foreach(x.0中的变量y)
{
控制台写入线(x.page);
控制台写入线(y.U id);
控制台写入线(y.date\U修改);
}
}
Console.ReadLine();
}

}

我将使用内置的JavaScriptSerializer和匹配的类。所以你会有这样的想法:

public class StatusObj{
    public int status {get; set; }
    public DataObj data { get; set; }
}

public class DataObj {
    public List<RespondentObj> respondents {get set;}
    public int page {get; set;}
    public int page_size {get; set;}
}

public class RespondentObj{
    public DateTime date_modified {get; set;}
    public Int64 respondent_id {get; set;}
}
var deserializer = new JavaScriptSerializer();
var results = deserializer.Deserialize<StatusObj>(stream);
公共类状态OBJ{
公共int状态{get;set;}
公共数据对象数据{get;set;}
}
公共类数据对象{
公共列表应答者{get set;}
公共整型页{get;set;}
公共整型页面大小{get;set;}
}
公共类响应对象{
public DateTime date_modified{get;set;}
公共Int64应答器id{get;set;}
}
然后,您可以按如下方式反序列化流:

public class StatusObj{
    public int status {get; set; }
    public DataObj data { get; set; }
}

public class DataObj {
    public List<RespondentObj> respondents {get set;}
    public int page {get; set;}
    public int page_size {get; set;}
}

public class RespondentObj{
    public DateTime date_modified {get; set;}
    public Int64 respondent_id {get; set;}
}
var deserializer = new JavaScriptSerializer();
var results = deserializer.Deserialize<StatusObj>(stream);
var反序列化器=新的JavaScriptSerializer();
var results=反序列化程序。反序列化(流);

什么是CCB?您的问题不清楚。@Kashif变更控制委员会,简而言之,他们需要批准。基本上您不能安装任何json库?我仍然无法将其填充到结果中。我假设我遵循您的代码,这应该包含一个状态列表,其中包含一个数据列表,其中包含一个响应者列表。我可以使用嵌套的foreach来获取数据。但结果只是没有普及。我很感谢你的帮助,这看起来很简单。@KeithL它是抛出错误还是返回空结果?假设名称相同,结构相同,如果没有填充数组,您也可以尝试使用数组而不是列表。我在上面添加了我的代码,减去API pull部分。我似乎无法将值输入结果。@KeithL好的,我想我已经弄明白了,我错误地读取了JSON字符串,“data”属性不是列表,它只是一个包含列表的对象,我正在编辑代码。非常感谢。我想我现在真的可以坚持下去了,我们所犯的错误也给了我宝贵的一课。