Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET C中读取JSON数据#_C#_Asp.net_Json_Json.net - Fatal编程技术网

C# 在ASP.NET C中读取JSON数据#

C# 在ASP.NET C中读取JSON数据#,c#,asp.net,json,json.net,C#,Asp.net,Json,Json.net,我试图检索存储在JSON字符串中的值,该字符串是我使用Newtonsoft.JSON从网站获取的 我有下面的代码,但我无法解决如何循环数据以检索调色板->线程->名称部分中的名称标记。线程名称的数量可能从1到15不等 下面代码的预期结果是输出如下内容 使用的颜色:黑色、浅蓝色、白色等 任何帮助都将不胜感激,我已经绞尽脑汁看了其他人的例子,但我在应用字典或列表方面没有运气(我仍在学习.net) 您应该按照以下方式对JsonClass建模,并添加线程等: public class JsonClass

我试图检索存储在JSON字符串中的值,该字符串是我使用Newtonsoft.JSON从网站获取的

我有下面的代码,但我无法解决如何循环数据以检索调色板->线程->名称部分中的名称标记。线程名称的数量可能从1到15不等

下面代码的预期结果是输出如下内容 使用的颜色:黑色、浅蓝色、白色等

任何帮助都将不胜感激,我已经绞尽脑汁看了其他人的例子,但我在应用字典或列表方面没有运气(我仍在学习.net)


您应该按照以下方式对
JsonClass
建模,并添加线程等:

public class JsonClass
{
  public int Width { get; set; }
  public int Height { get; set; }
  public int NumStitches { get; set; }
  public Palette Palette { get; set; }
}

public class Palette
{
  public IEnumerable<Thread> Threads { get; set; }
}

public class Thread
{
  public string Name { get; set;}
  ...
}

使用JSON.NET内置LINQ to JSON提供程序的解决方案:

JObject jObject = JObject.Parse(jsondata);

JArray threads = (JArray)jObject["Palette"]["Threads"];

var colorsUsed = new StringBuilder();
colorsUsed.Append("Colours used: ");

foreach (var thread in threads)
{
    colorsUsed.AppendFormat("{0}, ", thread["Name"]);
}

Response.Write(colorsUsed);

使用以下模型反序列化json

     public class Palette
     {
       public List<Thread> Threads { get; set; }
     }
      public class Thread
   {
public string Name { get; set; }
public string Manufacturer { get; set; }
public string Code { get; set; }
public int Red { get; set; }
public int Green { get; set; }
public int Blue { get; set; }
public string Type { get; set; }
public int Thickness { get; set; }
}

   public class Colors
{
public int Width { get; set; }
public int Height { get; set; }
public int NumStitches { get; set; }
public Palette Palette { get; set; }
public List<int> Needles { get; set; }
}

将Json映射到类时,一个方便的提示是安装,因为它有一个名为“将Json粘贴为类”的东西。您只需复制json字符串并粘贴到VisualStudio中,然后VisualStudio就会为您创建匹配的类。您使用的是什么版本的net framework?尝试使用“动态”而不是对象
公共动态调色板{get;set;}
您将能够在运行时访问任何属性。@TimBJames,谢谢您的建议@ViktorArsanov我也发现了这个例子,但我使用的是v2,它不起作用:(这是我尝试尝试的,但无法解决的问题!但我在这方面又遇到了一个问题,当我添加foreach循环时,“thread”一词的下划线不规则,并警告“找不到类型或命名空间名称“thread”(是否缺少using指令或程序集引用?)@Chris抱歉,我无法想象你的问题是什么。我已经完全尝试了我的代码,它成功了。你的foreach循环是否与我的示例中的完全相同?你可能有其他类似的引用吗?如果你将
线程
重命名为例如
myTempVariable
,会发生什么?谢谢Kevin,你的答案现在就起作用了!够有趣的,tBruceWayne的另一个回复与您的回复类似,但也有同样的问题,foreach循环中缺少了“var”一词,这使它无法运行。我尝试使用“string”,但它说计算机没有,我没想到要使用var。@Chris,Kevin犯了我修复的相同的小技术错误(缺少var),但您应该慢慢地学会修复代码中的此类打字错误或小的不规则之处,而不是询问它为什么不起作用。显然,线程不能是字符串,因为您正在迭代thread类型的对象集合。因此,简单地说,对于Threads集合中thread类型的每个对象->do this.Var是一个keyword,让编译器决定用什么替换它,在这种情况下,它知道这些是线程对象,但您也可以简单地在那里写“Thread Thread in pal.Threads”。这看起来很容易理解,但我得到的错误与上面的另一个示例相同。“Thread”一词的下划线不规则,带有警告“找不到类型或命名空间名称‘thread’(是否缺少using指令或程序集引用?)”太好了!非常感谢。它说我无法投票,因为我刚刚加入!
foreach (var thread in pal.Threads)
{
  Response.Write(thread.Name + ", ");
}
JObject jObject = JObject.Parse(jsondata);

JArray threads = (JArray)jObject["Palette"]["Threads"];

var colorsUsed = new StringBuilder();
colorsUsed.Append("Colours used: ");

foreach (var thread in threads)
{
    colorsUsed.AppendFormat("{0}, ", thread["Name"]);
}

Response.Write(colorsUsed);
     public class Palette
     {
       public List<Thread> Threads { get; set; }
     }
      public class Thread
   {
public string Name { get; set; }
public string Manufacturer { get; set; }
public string Code { get; set; }
public int Red { get; set; }
public int Green { get; set; }
public int Blue { get; set; }
public string Type { get; set; }
public int Thickness { get; set; }
}

   public class Colors
{
public int Width { get; set; }
public int Height { get; set; }
public int NumStitches { get; set; }
public Palette Palette { get; set; }
public List<int> Needles { get; set; }
}
 var output = JsonConvert.DeserializeObject<Colors>(jsondata);
  foreach(var thread in output.Palette.Threads){
 //something like you wanted
   Response.Write(thread.Name + ",");
 }