我有一个从json创建的对象数组。
每个数组值是一个包含2个子数组的数组。
第一个是["id", some integer]
形式
第二个是["name", "SomeName"]
。
我想使用linq将这些值提取到类数组中 具有这两个属性(即id和name):
public class person
{
public int id;
public string name;
}
所以结果将是person[]
形式。
如何使用linq完成?
帮助将非常感激。
编辑:
原始的json(它真的是流派):
{"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},
{"id":16,"name":"Animation"},{"id":35,"name":"Comedy"},
{"id":80,"name":"Crime"},{"id":878,"name":"Science Fiction"},
{"id":10770,"name":"TV Movie"},{"id":53,"name":"Thriller"},
{"id":10752,"name":"War"},{"id":37,"name":"Western"}]}
然后我用了:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Dictionary<string, object> obj = (Dictionary<string,object>)json_serializer.DeserializeObject(GenresStr);
object[] genresArr = (object[])obj["genres"];
因此genresArr具有[[],[]]数组,每个内部[]的形式为: [“id”,某个整数]和[“name”,“some name”]
答案 0 :(得分:2)
您可以使用Newtonsoft.Json
nuget包直接将JSON对象解析为模型。
var objData = JsonConvert.DeserializeObject<MyData>(jsonString);
的json数据中获取模型类
您也可以使用动态对象进行转换
var objData = JsonConvert.DeserializeObject<dynamic>(jsonString);
或者没有指定模型calss
var objData = JsonConvert.DeserializeObject(jsonString);
所以你的objData将是一个类型列表,你可以使用简单的LINQ操作从中获取数据。
答案 1 :(得分:1)
我认为你并不完全明白什么是JSON。另一个奇怪的事情是,当你的JSON包含一个类型列表时,你想要一个人列表。
要反序列化此JSON,首先需要创建相应的模型。您可以随时使用http://json2csharp.com寻求帮助:
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
}
public class RootObject
{
public List<Genre> Genres { get; set; }
}
然后,您只需要一行代码。我在这个例子中使用JSON.NET(它比JavaScriptSerializer
好得多):
var obj = JsonConvert.DeserializeObject<RootObject>(json);
答案 2 :(得分:0)
假设您已经拥有C#数组,可以使用这种基于 LINQ 的方法:
var ids = new int[] { 10, 20, 30 };
var names = new String[] { "A", "B", "C" };
var personArray = ids.Zip(names, (id, name) => new Person(id, name)).ToArray();