【发布时间】: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。
不过,root 和 project 似乎没问题。
显然,我在这一行做错了什么:
root.project.locations[i] = new Location();
有人知道如何在 C# 中声明一个对象,该对象将成为数组的一部分吗? (或者我完全错误地使用 new 运算符,就像我对 root 和 project 所做的那样?)
附:有评论说我的问题与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