无法返回特定的嵌套类属性

时间:2016-04-19 09:45:40

标签: c#

我创建了一个用于反序列化JSON的类(我使用JSON.net),这是结构:

public class User
{
    public string Name { get; set; }
    public string Surname { get; set;}
}

public class RootObject
{
    public List<User> Users { get; set; }
}

我像这样反序列化JSON:

var obj = JsonConvert.DeserializeObject<RootObject>(responseText);

现在,如果我想要返回所有JSON,我只需执行:return obj.Users;但是如何返回类User的特定属性?特别是Name属性。我试过这个:

return obj.Users.name // user list does not contain any name property

我也试过LINQ:

obj.Select(c => c.Name).Single();

但我无法使用Select,因为我需要将obj声明为:

var obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);

如果我返回obj.user;,我可以使用LINQ并访问该名称。但是如何在返回响应的方法中做到这一点?

2 个答案:

答案 0 :(得分:2)

添加对类

的引用
 using System.Linq;

因为用户属于List类型,所以可以在其中应用lambda表达式。不要使用Single如果user中包含多条记录,则会失败,请改用FirstOrDefault。它适用于零个或多个元素

var obj = JsonConvert.DeserializeObject<RootObject>(responseText);
string name = obj.user.Select(p=> p.name).FirstOrDefault();
string surname = obj.user.Select(p=> p.surname).FirstOrDefault();

答案 1 :(得分:0)

您必须使用一个用户而不是整个列表,因为RootObject.userList<User>而不是User的实例:

var name = obj[0].Name;

或者您要使用的列表中的任何元素。

另外使用LINQ:

var user = obj.FirstOrDefault();
if (user != null) name = user.name;