生成Json对象时,C#索引超出了数组的边界
我创建了一个类:生成Json对象时,C#索引超出了数组的边界,c#,asp.net,C#,Asp.net,我创建了一个类: internal class Movie { public class BaseResponse { public Item[] search { get; set; } public string response { get; set; } } public class Item { public string title { get; set; } }
internal class Movie
{
public class BaseResponse
{
public Item[] search { get; set; }
public string response { get; set; }
}
public class Item
{
public string title { get; set; }
}
我想为搜索数组创建n个对象,如下所示:
public void Generate()
{
Movie.BaseResponse baseResponse = new Movie.BaseResponse();
baseResponse.response = "True!";
baseResponse.search = new Movie.Item[] { new Movie.Item()};
baseResponse.search[0].title = "Title one";
baseResponse.search[1].title = "Title two"; //Error accurs here****
string response = JsonConvert.SerializeObject(baseResponse);
}
但此脚本工作不正常,并出现以下错误:
索引超出了数组的边界
有人能解释一下如何在
电影
类中创建搜索
数组的n个对象吗?您已经创建了一个包含1个项目的数组,但是您正在尝试访问不存在的第二个项目
将相关行更改为类似以下内容:
baseResponse.search = new Movie.Item[] { new Movie.Item(), new Movie.Item() };
与其使用数组(
T[]
),不如使用列表
。您需要提前知道一个数组中有多少项(因为它们是连续分配的)。您可以随时向列表中添加新项目
更改代码:
internal class Movie
{
public class BaseResponse
{
public List<Item> Search { get; set; } = new List<Item>();
public string Response { get; set; }
}
public class Item
{
public string Title { get; set; }
}
}
public void Generate()
{
Movie.BaseResponse baseResponse = new Movie.BaseResponse();
baseResponse.Response = "True!";
baseResponse.Search.Add (new Movie.Item { Title = "Title One" });
baseResponse.Search.Add (new Movie.Item { Title = "Title Two" });
string response = JsonConvert.SerializeObject(baseResponse);
}
baseResponse.search=new Movie.Item[]{new Movie.Item()}
在数组中只定义一个项,因此[1]
抛出错误。如果您想要更多,请在括号内添加更多new Movie.Item()
调用。@RonBeyer:正如我所说,我需要创建n个对象。例如,我无法添加“new Movie.Item()”100次。有没有办法在不定义计数的情况下创建对象?您需要创建n个对象,所以使用循环,这里的问题是什么?您创建了一个包含项的数组,如果需要创建包含n个项的数组,请使用循环。正如我所说,我需要创建n个对象。例如,我无法添加“new Movie.Item()”100次。有没有办法在不定义计数的情况下创建对象?请您澄清一下,我如何在“Movie”类中使用List而不是“public string search”?@E.Mamaghani。好了<代码>列表几乎总是比T数组好。
{
"Search":[
{"Title":"Title One"},
{"Title":"Title Two"}],
"Response":"True!"
}