Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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/9/csharp-4.0/2.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# JavaScriptSerializer:对象引用未设置为对象的实例_C#_C# 4.0_Mono_Xamarin Studio - Fatal编程技术网

C# JavaScriptSerializer:对象引用未设置为对象的实例

C# JavaScriptSerializer:对象引用未设置为对象的实例,c#,c#-4.0,mono,xamarin-studio,C#,C# 4.0,Mono,Xamarin Studio,我做错了什么 using System.Web.Script.Serialization; string json = "{\"numbers\":[{\"one\":\"1\"},{\"two\":\"2\"},{\"three\":\"3\"}]}"; dynamic dictionary = new JavaScriptSerializer().Deserialize<dynamic>(json); Assert.AreEqual(3, dictionary["numbers

我做错了什么

using System.Web.Script.Serialization;

string json = "{\"numbers\":[{\"one\":\"1\"},{\"two\":\"2\"},{\"three\":\"3\"}]}";
dynamic dictionary = new JavaScriptSerializer().Deserialize<dynamic>(json);
Assert.AreEqual(3, dictionary["numbers"].Count);

System.NullReferenceException : Object reference not set to an instance of an object
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToObject (IDictionary`2 dict, System.Type type) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType (System.Type type, System.Object obj) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToList (System.Collections.ArrayList col, System.Type type) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType (System.Type type, System.Object obj) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToObject (IDictionary`2 dict, System.Type type) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType (System.Type type, System.Object obj) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType[Object] (System.Object obj) [0x00000] in <filename unknown>:0 
  at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[Object] (System.String input) [0x00000] in <filename unknown>:0
使用System.Web.Script.Serialization;
字符串json=“{\'numbers\”:[{\'one\':\'1\'}、{\'two\':\'2\'}、{\'twree\':\'3\'}];
动态字典=新的JavaScriptSerializer()。反序列化(json);
Assert.AreEqual(3,字典[“数字”].Count);
System.NullReferenceException:对象引用未设置为对象的实例
位于System.Web.Script.Serialization.JavaScriptSerializer.ConvertToObject(IDictionary`2 dict,System.Type类型)[0x00000]中:0
在:0中的System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType(System.Type类型,System.Object obj)[0x00000]处
在:0中的System.Web.Script.Serialization.JavaScriptSerializer.ConvertToList(System.Collections.ArrayList列,System.Type类型)[0x00000]处
在:0中的System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType(System.Type类型,System.Object obj)[0x00000]处
位于System.Web.Script.Serialization.JavaScriptSerializer.ConvertToObject(IDictionary`2 dict,System.Type类型)[0x00000]中:0
在:0中的System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType(System.Type类型,System.Object obj)[0x00000]处
位于:0中的System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType[Object](System.Object obj)[0x00000]
在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[Object](System.String输入)[0x00000]中:0

由于我认为您的代码没有问题,除了使用count属性之外,而且由于在反序列化json时代码正在中断,我建议您改用静态类型定义,以缩小代码问题的变化范围:

        string json = "{\"numbers\":[{\"one\":\"1\"},{\"two\":\"2\"},{\"three\":\"3\"}]}";
        var dictionary = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);
string json=“{\'numbers\':[{\'one\':\'1\'},{\'two\':\'2\'},{\'twree\':\'3\'}”;
var dictionary=newJavaScriptSerializer()。反序列化(json);

也许只是在JavaScriptSerializer中使用动态类型会有问题,如果JavaScriptSerializer确实有问题,您可以随时向MSFT报告。

因为我无法使
字典
工作,所以我决定放弃它,改用静态类型。顺便说一句,从JSON生成C#类非常方便。

哪一行抛出了错误?我不明白的一点是:为什么在这里使用dynamic关键字,它对您的情况没有任何好处。如果您看这一行:“at System.Web.Script.Serialization.JavaScriptSerializer.ConvertToObject(IDictionary`2 dict,System.Type Type)[0x00000]在:0”中,转换到字典时出现的错误似乎与此相关。您是否尝试使用静态类型来缩小问题?使用
而不是
动态
仍然会出现相同的错误:(我自己尝试过这段代码,如果它工作正常,即使JSON无效,你也会得到一个不同的异常。我不知道问题出在哪里。这段代码是否被多个线程使用?我想不出其他任何东西。这段代码没有什么特别之处,我用一个简单的NUnit测试用例再现了这个问题.现在我正在使用Xamarin Studio 4.0,我想知道Mono的实现是否有缺陷或其他问题。好吧,这就说明了一切,是的,我想说Mono有一个实现问题,我以为你在使用.Net(windows)