C#和jSON不起作用
需要帮忙吗 所以我有一个json url,需要将每个项目放入一个for-each循环中 这里是jsonC#和jSON不起作用,c#,arrays,json,C#,Arrays,Json,需要帮忙吗 所以我有一个json url,需要将每个项目放入一个for-each循环中 这里是json { "_links": { }, "count": 9, "list": { "staff": [ "staff1", "staff2", "staff3" ], "clients": [ "client1",
{
"_links": { },
"count": 9,
"list": {
"staff": [
"staff1",
"staff2",
"staff3"
],
"clients": [
"client1",
"client2",
"client3",
"client4",
"client5",
"client6"
]
}
}
我还用c#编写了以下代码,但不断出现错误
string source;
var sURL = "LINK_TO_JSON_URL";
WebRequest req = HttpWebRequest.Create(sURL);
req.Method = "GET";
req.Timeout = 5000;
try
{
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
source = reader.ReadToEnd();
reader.Close();
}
JToken jObject = JObject.Parse(source);
string clients = (string)jObject["list"]["clients"];
//for each loop here
}
catch (Exception ex)
{
//error message here
}
我做错了什么?我试图将字符串转换为数组,但仍然一无所获。
我想知道每个客户的名字
干杯下面是一些代码,用于显示在包含字符串的
JArray
上进行迭代。这段代码已经用json进行了测试,并输出每个客户端字符串
var jObject = JObject.Parse(source);
foreach (var client in jObject["list"]["clients"])
{
Console.WriteLine((string)client);
}
看看这段代码
#region Model For Deserialize String to Object
public class Links
{
}
public class List
{
public List<string> staff { get; set; }
public List<string> clients { get; set; }
}
public class RootObject
{
public Links _links { get; set; }
public int count { get; set; }
public List list { get; set; }
}
#endregion
#region Restfull Respone (String) Convert To RootObject
public class ConvertStringToObj
{
public void Execute()
{
//Your webReq and Response progress here
string jsonResponse="";
var rootObj = (RootObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResponse, typeof(RootObject));
foreach(var eachItem in rootObj.list.staff)
{
var stafName = eachItem;
}
}
}
#endregion
将字符串反序列化为对象的区域模型
公共类链接
{
}
公共班级名单
{
公共列表人员{get;set;}
公共列表客户端{get;set;}
}
公共类根对象
{
公共链接_链接{get;set;}
公共整数计数{get;set;}
公共列表{get;set;}
}
#端区
#区域Restfull响应(字符串)转换为RootObject
公共类ConvertStringToObj
{
public void Execute()
{
//您的webReq和响应进度在这里
字符串jsonResponse=“”;
var rootObj=(RootObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResponse,typeof(RootObject));
foreach(rootObj.list.staff中的var eachItem)
{
var stafName=每个项目;
}
}
}
#端区
这里有一个解决方案,您可以通过对象执行此操作:)您收到的错误消息是什么?看起来
jObject[“list”][“clients”]
将是一个JArray
。你应该迭代它,而不是将它转换成字符串代码>您不能将jObject[“list”][“clients”]强制转换为字符串或字符串数组,如果您中的任何人确实尝试过这样做,您就会知道这一点。转换为字符串数组是一个编译时错误。转换为字符串是一个运行时错误。我相信返回值是一个JToken,而不是一个JArray(但是你仍然可以在JToken上迭代,如下面Crashstr的回答所示,因为JToken是JArray的后代),这实际上是正确的,并且在任何时候都不会试图可笑地将一个对象投射到另一个无法投射的对象上+先生,你是个传奇人物。如果你想这样做(有时比使用JObject
之类的东西更好),你应该使用反序列化对象
,这样你就不需要强制转换或额外的参数了。是的,你是对的。但是需要使用这个typeof(RootObject)参数的一些特殊情况。特别是将字符串转换为列表类型。顺便说一下,我非常喜欢这个对象解决方案。因为,一切都很清楚。。。。