如何返回多个类的对象

本文关键字:对象 何返回 返回 | 更新日期: 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; }
}

现在我需要返回一个包含 UserDetail 的对象。特别是我想向用户发送一个允许访问obj.Tenant.Userobj.Tenant.Detail的对象。这是我发回数据的方法:

public List<Tenant> searchUser()
{
    var obj = JsonConvert.DeserializeObject<RootObject>("json");
    return obj.tenant; //?
}

Tenant对象包含类 userdetail 。现在,用户是用户列表,详细信息包含每个用户的详细信息列表。但不幸的是,我收到了此错误消息:

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 List searchUser() {    var obj = JsonConvert.DeserializeObject("json");    返回对象租户;类型为租户(根据根对象)}

两者之一(或两者)为假。如果一个为假,则有两个选项:

  1. 因此,您应该将返回类型更改为Tenant

    public Tenant searchUser() {    var obj = JsonConvert.DeserializeObject("json");    返回对象租户;类型为租户(根据根对象)}
  2. 否则,您必须更改tenantRootObject类型:

    公共类根对象{     public List tenant { get; set; }}

根据您的 JSON 文件,它是第一个选项 (1.)。

然后,您可以使用searchUser的结果访问UserDetail:如下所示:

var tenant = searchUser();
var user = tenant.user;
var detail = tenant.detail;
//... do something with user and detail