如何返回多个类的对象
本文关键字:对象 何返回 返回 | 更新日期: 2024-11-07 09:44:15
我需要反序列化一个json,所以我创建了这个类结构:
public class Detail
{
public string code { get; set; }
public string type { get; set; }
}
public class User
{
public string name { get; set; }
public string surname { get; set; }
public string lastname { get; set; }
}
public class Tenant
{
public List<User> user { get; set; }
public List<Detail> detail { get; set; }
}
public class RootObject
{
public Tenant tenant { get; set; }
}
现在我需要返回一个包含 User
和 Detail
的对象。特别是我想向用户发送一个允许访问obj.Tenant.User
和obj.Tenant.Detail
的对象。这是我发回数据的方法:
public List<Tenant> searchUser()
{
var obj = JsonConvert.DeserializeObject<RootObject>("json");
return obj.tenant; //?
}
Tenant
对象包含类 user
和 detail
。现在,用户是用户列表,详细信息包含每个用户的详细信息列表。但不幸的是,我收到了此错误消息:
Can not be converted implicitly the 'User.Tenant' type 'System.Collections.Generic.List <User.Tenant>' Tenant
在这一行上:return obj.tenant;
我想我错了发回数据的类型。但是我该如何解决这个问题呢?
取决于你真正需要的。
如果需要返回租户对象,请将方法签名/返回为此...
public Tenant getTenant()
{
var obj = JsonConvert.DeserializeObject<RootObject>("json");
return obj.tenant;
}
如果您需要用户,请更改您的方法签名/返回到此...
public List<User> getUsers()
{
var obj = JsonConvert.DeserializeObject<RootObject>("json");
return obj.tenant.user; //?
}
但是,我建议您更改属性名称以具有正确的大写。如果要返回 User 对象列表,则将该属性称为 Users(而不是 user)是有意义的。考虑您的数据模型,每个链接是一对一还是一对多等,并相应地进行代码/名称。
MS 命名建议 (https://msdn.microsoft.com/en-us/library/ms229012.aspx)。
问题是您的方法签名表明您将返回一个List<Tenant>
而您的返回类型清楚地表明它是一个Tenant
:
public ListsearchUser() { var obj = JsonConvert.DeserializeObject ("json"); 返回对象租户;类型为租户(根据根对象)}
两者之一(或两者)为假。如果一个为假,则有两个选项:
-
因此,您应该将返回类型更改为
Tenant
:public Tenant searchUser() { var obj = JsonConvert.DeserializeObject
("json"); 返回对象租户;类型为租户(根据根对象)} -
否则,您必须更改
tenant
的RootObject
类型:公共类根对象{ public List
tenant { get; set; }}
根据您的 JSON 文件,它是第一个选项 (1.)。
然后,您可以使用searchUser
的结果访问User
和Detail
:如下所示:
var tenant = searchUser();
var user = tenant.user;
var detail = tenant.detail;
//... do something with user and detail