生成Json对象时,C#Index超出了数组的范围

问题描述 投票:-1回答:2

我创建了一个类:

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);
}

但是这个脚本不能正常工作,它会出现以下错误:

指数数组的边界之外

任何人都可以解释如何在search类中创建Movie数组的n个对象?

c# asp.net
2个回答
1
投票

而不是使用数组(T[]),你最好使用List<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);
}

这似乎有效。我得到这个response

{
    "Search":[
        {"Title":"Title One"},
        {"Title":"Title Two"}],
     "Response":"True!"
}

1
投票

您已经创建了一个包含1个项目的数组,但是您正在尝试访问不存在的第二个项目。

将相关行更改为:

baseResponse.search = new Movie.Item[] { new Movie.Item(), new Movie.Item() };
© www.soinside.com 2019 - 2024. All rights reserved.