如何返回多个类的对象?

时间:2016-04-22 14:57:07

标签: c#

我需要反序列化一个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。现在,user是用户列表,详细信息包含每个用户的详细信息列表。但不幸的是我收到了这条错误消息:

Can not be converted implicitly the 'User.Tenant' type 'System.Collections.Generic.List <User.Tenant>' Tenant 

就在这一行:return obj.tenant;

我想我错了发回数据的类型。但我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:3)

取决于你真正需要的。

如果您需要返回租户对象,请更改您的方法签名/返回此...

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)。

答案 1 :(得分:2)

问题是,您的方法签名表明您将返回List<Tenant>,而您的返回类型明确表示它是单Tenant

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

两个中的一个(或两个)都是假的。如果一个是假的,有两个选择:

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

    public Tenant searchUser() {
        var obj = JsonConvert.DeserializeObject<RootObject>("json");
        return obj.tenant; //Type is Tenant (according to RootObject)
    }
    
  2. 否则您必须更改RootObject的{​​{1}}类型:

    public class RootObject
    {
         public List<Tenant> tenant { get; set; }
    }
    
  3. 根据您的JSON file,这是第一个选项(1。)。

    然后,您可以使用tenant的结果访问UserDetail:类似于:

    searchUser