我创建了一个用于反序列化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并访问该名称。但是如何在返回响应的方法中做到这一点?
答案 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.user
是List<User>
而不是User
的实例:
var name = obj[0].Name;
或者您要使用的列表中的任何元素。
另外使用LINQ:
var user = obj.FirstOrDefault();
if (user != null) name = user.name;