C# 如何创建对象数组?
我已经创建了一个dll,可以对我的API执行一些请求。现在请求向我发回一个json响应,我要做的是(从dll)返回一个对象数组,该数组将在实现dll的程序中使用。现在我上了这门课:C# 如何创建对象数组?,c#,C#,我已经创建了一个dll,可以对我的API执行一些请求。现在请求向我发回一个json响应,我要做的是(从dll)返回一个对象数组,该数组将在实现dll的程序中使用。现在我上了这门课: public class Details { public string name { get; set; } public string age { get; set; } } public class Info { public List<object> info { get
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; }
}
我想知道的是:如何创建对象列表?特别是,我希望发回具有as属性details
和info
的user
对象。结果应该是一个object'数组,因为调用该对象的人需要遍历其中的一个数组,并将每个对象属性读取为:
user[0].details.name: //where 0 is the index of the user (php syntax)
我不知道在c#中是否有可能,有人可以帮助我实现这个目标?您的json转换器返回
列表
,并且每个根对象
只包含一个属性:user。一个简单的Linq查询将列表
更改为列表
对象:
var users = obj.Select(o => o.user).ToList();
users
中的每个元素都是一个用户
,具有详细信息
和信息
属性
作为如何使用此示例的示例,请考虑您有一种方法从JSON进行转换,并希望该方法返回用户列表。该方法看起来像这样:
var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned");
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;
}
foreach (RootObject elem in obj)
{
foreach (Info info in elem.user.info.info)
{
object[] localInfo = info.info.ToArray(); //<- contains all the information
}
}
您应该考虑将您的公共属性更改为C中的惯用做法。
< P>您的JSON转换器返回“代码>列表< /代码>,并且每个<代码> RootObject < /C> >只包含一个属性:用户。一个简单的Linq查询将列表
更改为列表
对象:
var users = obj.Select(o => o.user).ToList();
users
中的每个元素都是一个用户
,具有详细信息
和信息
属性
作为如何使用此示例的示例,请考虑您有一种方法从JSON进行转换,并希望该方法返回用户列表。该方法看起来像这样:
var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned");
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;
}
foreach (RootObject elem in obj)
{
foreach (Info info in elem.user.info.info)
{
object[] localInfo = info.info.ToArray(); //<- contains all the information
}
}
你应该考虑改变你的公共属性,就像C中的惯例一样。
< P> JsonConvert。可以使用方法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();
var obj=JsonConvert.DeserializeObject(“json返回”);
RootObject[]数组=obj.ToArray();
字符串s=数组[0]。user.details.name;
对象[]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(obj中的var用户)
{
item.user.details.name;
//获取一些信息(不能包含任何内容)
foreach(user.info.info中的变量信息)
{
info;//JsonConvert.DeserializeObject>返回根对象的列表。您可以使用方法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();
var obj=JsonConvert.DeserializeObject(“json返回”);
RootObject[]数组=obj.ToArray();
字符串s=数组[0]。user.details.name;
对象[]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(obj中的var用户)
{
item.user.details.name;
//获取一些信息(不能包含任何内容)
foreach(user.info.info中的变量信息)
{
info;//您想要一个所有用户对象的列表吗?试试这个:var users=obj.Select(x=>x.user.ToArray();
您想要一个所有用户对象的列表吗?试试这个:var users=obj.Select(x=>x.user.ToArray());
我应该将该方法声明为public List
?Linq查询本身不是一个方法。您可以将其添加到代码中的任何位置来进行转换。嵌入该方法的方法可以是public、private或其他任何形式,具体取决于您的设计。Ok似乎工作正常,只需像这样保存对象:object user=User.GetUsersFromJson();
但我不明白如何遍历它,因为如果我这样做:用户。
intellisense不显示任何用户类属性,相反,如果我放置断点,我可以看到用户和属性的列表。我得到以下错误:foreach指令无法处理对象类型的变量,因为对象不包含在GetEnumerator的公共定义中
。特别是某些用户,用红色下划线表示。。有什么问题?如果不知道您的代码,就无法确切地说出您做错了什么。foreach中使用的对象很可能不是集合。我是否应该将该方法声明为公共列表
?Linq查询本身不是一个方法。您可以将其添加到代码中的任何位置以进行转换。嵌入它的方法可以是公共的、私有的或任何取决于您的设计的方法。Ok似乎工作正常,只需一件事我将对象保存为这样:object user=user.GetUsersFromJson();
但我不明白如何遍历它,因为如果我这样做:用户。
intellisense不显示任何用户类属性,相反,如果我放置断点,我可以看到用户和属性的列表。我得到以下错误:foreach指令无法处理对象类型的变量,因为对象不包含在GetEnumerator的公共定义中
。特别是用户,用红色下划线表示。。有什么问题吗?如果不知道代码,就无法准确判断错误所在。foreach中使用的对象很可能不是集合。