C# - 如何从json动态对象中检索数组?

时间:2016-10-16 02:18:38

标签: c# arrays json type-conversion

我试图将数组直接从JSON“data”项转换为数组变量:

string jsonString = "{\"data\":[
                       {\"name\":false,\"number\":true},
                       {\"name\":false,\"number\":false},
                       {\"name\":true,\"number\":false}
                     ]}";

var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic jsonObject = serializer.Deserialize(jsonString, typeof(object));

Array jsonArray = jsonObject.data;
// Here error says:
//Cannot implicitly convert type 'System.Collections.Generic.List<object>' to 'System.Array' 

dynamic lastJsonArrayData = jsonArray[jsonArray.Length - 1];
// this is where the error occurs, it says:
//Cannot apply indexing with [] to an expression of type 'Array'

我需要做的最后一件事是将lastJsonArrayData转换回动态对象,但我不知道如何...我需要最后两个步骤单独执行,如它所述,这意味着首先得到数组然后得到对象!! 我是C#的新手

修改 真正的JSON结构实际上更像是这样:

string jsonString = "{\"firstlevel\":{\"secondlevel\":{\"data\":[
                       {\"name\":false,\"number\":true},
                       {\"name\":false,\"number\":false},
                       {\"name\":true,\"number\":false}
                     ]}}}";

2 个答案:

答案 0 :(得分:1)

这似乎有效:

var jsonArray = jsonObject.data.ToArray();

(乔尔给了我一个提示。但他宣称Array jsonArray。它没有用。)

答案 1 :(得分:0)

您可以考虑创建一个类来映射序列化内容 我的意思是,你需要一个

的创建类
public class Example{
   public string name;
  public string number;
}

在这里您需要将其更改为

var serializer = new JavaScriptSerializer();
                serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
                dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));

希望此参考可以让您更好地了解序列化和反序列化

https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

Deserialize JSON with C#

希望这有帮助