【问题标题】:Create new JSON item in an array在数组中创建新的 JSON 项
【发布时间】:2021-08-27 05:58:18
【问题描述】:

我正在使用 C# 和 JSON 设置我的第一步。

我在我的 Visual Studio 环境中安装了 Web Essentials,并使用它来创建 JSON 类结构。

我的 JSON 如下所示:

{
    "project": {
        "common.DESCRIPTION": "Project_Description",
        ...
        "locations": [
            {
                "common.NAME": "Location_Name",
                ...

Web Essentials “Paste Special”(用于从 JSON 中创建类)生成如下内容:

public class Project
{
    public string commonDESCRIPTION { get; set; }
    ...
    public Location[] locations { get; set; }
    ...
}

public class Location
{
    public string commonNAME { get; set; }
    ...

我的代码如下:

Rootobject root = new Rootobject();
for (int i = 0; i < listbox_with_names.Items.Count; i++)
{
    root.project = new Project();
    root.project.locations[i] = new Location();
    root.project.locations[i].commonNAME = listbox_with_names.Items[i].ToString();

此代码失败,因为位置具有null 值,导致NullPointerException
不过,rootproject 似乎没问题。

显然,我在这一行做错了什么:

root.project.locations[i] = new Location();

有人知道如何在 C# 中声明一个对象,该对象将成为数组的一部分吗? (或者我完全错误地使用 new 运算符,就像我对 rootproject 所做的那样?)

附:有评论说我的问题与another post 重复,但这篇文章非常大,很难找到我正在处理的一个问题(如果那里甚至提到过,我看了看,我觉得比如“TL;DR”(太长了,没看懂),抱歉)。

【问题讨论】:

  • root.project.locations = new Location[0];,更多信息在官方文档中:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/…
  • 使用它来初始化locations,它不会自行发生:root.project = new Project { locations = new Location[numberOfLocations] }。您需要从某处确定numberOfLocations 的值,并且它必须至少为1,否则数组无法存储任何项目。

标签: c# json new-operator nullreferenceexception


【解决方案1】:

感谢Peter B 和一些调试,我找到了解决方案:如您所见,需要运行 2 个单独的构造函数:

Rootobject root = new Rootobject();
root.project = new Project();
root.project.locations = new Location[listbox_with_names.Items.Count]; // construct the array
for (int i = 0; i < listbox_with_names.Items.Count; i++)
{
    root.project.locations[i] = new Location(); // construct each array member separately

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2018-04-28
    • 2015-04-28
    • 2016-01-25
    相关资源
    最近更新 更多