如何创建一个对象数组?

时间:2016-04-16 09:27:37

标签: c#

我已经创建了一个在我的API上执行某些请求的dll。现在请求发送给我一个json响应,我想要做的(从dll),返回一个对象数组,用于实现DLL的程序。现在我上了这堂课:

public class Details
{
    public string name { get; set; }
    public string age { get; set; }
}

public class Info
{
    public List<object> info { get; set; }
}

public class User
{
    public Details details { get; set; }
    public Info info { get; set; }
}

public class RootObject
{
    public User user { get; set; }
}

我将请求反序列化为:

var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned");

现在json包含用户的details,在某些情况下还包含info,所以我以这种方式迭代它:

foreach(var user in obj)
{
    item.user.details.name;
    //take some info (could not contain nothing)
    foreach(var info in user.info.info)
    {
         info; //<- contains all the information
    }
}

我想知道的是:如何创建对象列表?特别是我想要发回user具有属性detailsinfo的对象。结果应该是一个对象数组,因为对象需要迭代它并将每个对象属性读取为:

user[0].details.name: //where 0 is the index of the user (php syntax)

我不知道c#中是否有可能,有人可以帮我实现这个目标吗?

2 个答案:

答案 0 :(得分:3)

您的json转换器返回List<RootObject>,每个RootObject只包含一个属性:user。简单的Linq查询会将List<RootObject>更改为List<User>对象:

var users = obj.Select(o => o.user).ToList();

users中的每个元素都是User,同时包含DetailsInfo属性。

作为如何使用它的示例,请考虑您有一个从json进行转换的方法,并且您希望该方法返回用户列表。该方法看起来像这样:

public List<User> GetUsersFromJson()
{
    var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned");
    var users = obj.Select(o => o.user).ToList();
    return users;
}

您可以像这样迭代用户对象:

foreach (var user in users)
{
  var detail = user.details;
  var info = user.info;
}

您应该考虑将公共属性更改为camel-case,这是C#中常见的做法。

答案 1 :(得分:1)

JsonConvert.DeserializeObject&GT;返回RootObject列表。您可以使用方法ToArray()将列表更改为数组。

在这种情况下:

var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned");
RootObject[] array = obj.ToArray();

string s = array[0].user.details.name;
object[] infos = array[0].user.info.info.ToArray();

并在此代码中:

foreach(var user in obj)
{
    item.user.details.name;
    //take some info (could not contain nothing)
    foreach(var info in user.info.info)
    {
         info; //<- contains all the information
    }
}
没有感觉,它应该是这样的:

foreach (RootObject elem in obj)
{
     foreach (Info info in elem.user.info.info)
     {
         object[] localInfo = info.info.ToArray(); //<- contains all the information
     }
}