Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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# json.net反序列化对象_C#_Json_Json.net_Deserialization - Fatal编程技术网

C# json.net反序列化对象

C# json.net反序列化对象,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我有以下代码: string code = client.DownloadString("http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat"); DataSet data = JsonConvert.DeserializeObject<DataSet>(code.Substring(3, code.Length - 6)); textBox1.Text += "1"; string code=client.Downlo

我有以下代码:

string code = client.DownloadString("http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
DataSet data = JsonConvert.DeserializeObject<DataSet>(code.Substring(3, code.Length - 6));
textBox1.Text += "1";
string code=client.DownloadString(“http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
DataSet data=JsonConvert.DeserializeObject(code.Substring(3,code.Length-6));
textBox1.Text+=“1”;
但是它会停在第二行,就像有返回一样——它不会在文本框中写1。 我做错了什么

在这里,它被改写为结构: 谢谢

编辑:使用了try-catch,其异常为:

Newtonsoft.Json.JsonSerializationException:完成反序列化对象后,在Json字符串中找到其他文本。 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs中的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.反序列化(JsonReader,类型objectType,布尔checkAdditionalContent):第177行 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Json序列化器.Json反序列化内部(JsonReader阅读器,类型objectType):第711行 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Json序列化程序中反序列化(JsonReader阅读器,类型objectType):第663行 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Json\JsonConvert.cs中的Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值、类型、JsonSerializerSettings设置)处:第797行 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Json转换对象[T](字符串值,JsonSerializerSettings设置)中的Newtonsoft.Json.JsonConvert.DeserializeObject[T](第757行) 在c:\Temp\Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Json\JsonConvert.cs中的Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值)处:第694行 在c:\Users\zuz\Documents\Visual Studio 2012\Projects\oddsreader\oddsreader\Form1.Form1\u加载(对象发送方,事件参数e):第692行

当我尝试一些在线json验证器时,它们返回的字符串是有效的。有什么问题吗


编辑2:我可能完全错了。所以我要问一个更简单的问题。我怎样才能做一个“赔率”数组的foreach,然后再做它的子数组的foreach?通往赔率的路径是:[“d”][“oddsdata”][“back”][“E-1-2-0-0-0”][“赔率”]。我没有找到模式超过2级数组的示例代码。

似乎
JsonConvert
无法对传入的参数执行
反序列化对象

也就是说,
(3,code.Length-6)
可能不会为您提供有效的json字符串,因此JsonConvert无法对其进行转换


可能抛出了一个异常,但您没有捕获它,因此,它表现出类似“return”的行为。

您的问题不在于字符串,而在于转换为“DataSet”。这对我来说很好:

static void Main(string[] args)
{
    WebClient client = new WebClient();
    string code = client.DownloadString("http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
    client.Dispose();

    code = code.Replace("-|-", string.Empty);

    JObject json = JsonConvert.DeserializeObject<JObject>(code);

    int one = (int)json["d"]["bt"];

    Debug.Assert(one == 1);
}
static void Main(字符串[]args)
{
WebClient客户端=新的WebClient();
字符串代码=客户端。下载字符串(“http://oddsportal.com/feed/prematch/1-1-hSpbs4Cd-1-2.dat");
client.Dispose();
code=code.Replace(“-|-”,string.Empty);
JObject json=JsonConvert.DeserializeObject(代码);
int one=(int)json[“d”[“bt”];
Assert(一=1);
}

您所说的参数是什么意思?源代码是这样写的-|-{json}-|-,我不知道为什么。所以那个子串被用来修剪它。或者这会损害json字符串吗?哦,所以在pastebin中json字符串的前面附加了一个字符串
-|-{json}-|-
?我在pastebin上发布了它的结构化代码,以使其易于阅读。Original的开头和结尾都有“-|-”。您的DataSet对象是否对应于json字符串格式?我不明白您的意思。我对json没有太多的经验,这是我第一次尝试在c#中使用它。如果我在示例中有代码:
{“s”:1,“d”:{“bt”:1,“sc”:2}
,那么我想像这样访问它:变量[“d”][“bt”];等于1。这种方法正确吗?这很好。非常感谢。但是现在我需要类似于
foreach(json中的子数组[d][“oddsdata”][“back”][“E-1-2-0-0-0”])
,我该怎么做呢?@LukAss741您可以这样做来循环子JObject
foreach(JProperty prop in((JObject)json[“d”[“oddsdata”][“back”][“E-1-2-0-0”])).Properties())中的所有键/值。{Console.WriteLine()(string.Format(“obj[{0}]={1}”,prop.Name,prop.Value));}
但是正如您所看到的,对于格式如此糟糕的JSON,它将是一个PITA