这是我的代码
""{\n \"data\": [\n {\n \"listid\": \"\",\n \"name\": \"\"\n }\n ]\n}""
上面的字符串来自服务器。我想反序列化字符串并从对象数组中获取键。我尝试将JsonConvert.Deserialization
与Dictionary
一起使用,但它会引发异常。我还尝试了JObject
和JArray
。我想获得listId, name
个密钥。
答案 0 :(得分:3)
您是否尝试过反序列化为自己的类型?这对我有用:
public class Program
{
public static void Main(string[] args)
{
string deser = "{\n \"data\": [\n {\n \"listid\": \"\",\n \"name\": \"\"\n }\n ]\n}";
var obj = JsonConvert.DeserializeObject<MyCollection>(deser);
}
}
public class MyType
{
[JsonProperty("listid")]
public string ListId { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
public class MyCollection
{
[JsonProperty("data")]
public List<MyType> Data { get; set; }
}
答案 1 :(得分:1)
我得到了解决方案,以下代码正常
string json = "{\n \"data\": [\n {\n \"listid\": \"\",\n \"name\": \"\"\n }\n ]\n}";
var jss = new JavaScriptSerializer();
List<string> li = new List<string>();
dynamic jsondata = jss.Deserialize<dynamic>(json);
foreach (string key in jsondata["data"][0].Keys)
{
li.Add(key);
}
答案 2 :(得分:1)
您可以在C#中使用Newtonsoft.Json库
您需要使用与C#中json数组匹配的属性名创建相应的Classes,以便将json字符串反序列化为C#对象。
请参阅以下代码。
namespace StackOverflow.Test
{
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var json = "{\n \"data\": [\n {\n \"listid\": \"123\",\n \"name\": \"Name\"\n }\n ]\n}";
var lists = JsonConvert.DeserializeObject(json, typeof(Lists)) as Lists;
var list = lists.Data.FirstOrDefault();
Console.WriteLine("Name: " + list.Name);
Console.WriteLine("List Id: " + list.ListId);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
class Lists
{
public List<Info> Data { get; set; }
}
class Info
{
public string ListId { get; set; }
public string Name { get; set; }
}
}