使用linq从对象数组中提取模型

时间:2015-04-09 11:02:49

标签: c# json linq

我有一个从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”]

3 个答案:

答案 0 :(得分:2)

您可以使用Newtonsoft.Json nuget包直接将JSON对象解析为模型。

var objData = JsonConvert.DeserializeObject<MyData>(jsonString);

您可以从http://json2csharp.com/

的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();