Amien90 Ответов: 2

Создание объекта для сериализации в json вызывает исключение nullreferenceexception


public class RootJson
{
    public string App { get; set; }
    public List<SourcesFile> ListSourcesFile { get; set; }
}

public class SourcesFile
{
    public string Source { get; set; }
}

Это мой корень

Сейчас:

RootJson rootjson = new RootJson()
rootjson.App = appIdentifier.AppName;

using (StreamWriter file = File.CreateText(@"c:\test\source.json"))
{
   JsonSerializer serializer = new JsonSerializer();
   serializer.Serialize(file, rootjson);
}


Это тоже прекрасно работает. Но это не работает:

rootjson.ListSourcesFile[0].Source = "Fdf";


Это дает такую ошибку

Ссылка на объект не установлена на экземпляр объекта.

Я думаю, это потому, что ссылка не инициализирована. Но как я могу это сделать?

Что я уже пробовал:

ourcesFile ListSourcesFile = новый исходный файл ();

2 Ответов

Рейтинг:
1

Richard Deeming

Первая проблема заключается в том, что вы не инициализировали список, так что rootjson.ListSourcesFile возвращается null, и любая попытка индексирования в список выбрасывает NullReferenceException.

Вторая проблема заключается в том, что вы ничего не добавили в список. Когда вы попытаетесь получить первый элемент пустого списка, вы получите ArgumentOutOfRangeException говоря вам, что индекс, к которому вы пытаетесь получить доступ, не существует.

Попробуйте инициализировать список, прежде чем обращаться к нему:

RootJson rootjson = new RootJson
{
    App = appIdentifier.AppName,
    ListSourcesFile = new List<SourcesFile>
    {
        new SourcesFile
        {
            Source = "Fdf",
        },
    },
};

// Or:
RootJson rootjson = new RootJson();
rootjson.App = appIdentifier.AppName;
rootjson.ListSourcesFile = new List<SourcesFile>();

SourcesFile file = new SourcesFile();
file.Source = "Fdf";
rootjson.ListSourcesFile.Add(file);


Amien90

Спасибо!

Работать отлично .. но последний дополнительный вопрос: как я могу добавить два исходных файла в одно и то же приложение?

Добавим еще: rootjson.ListSourcesFile.Добавить файл);
не будет работать

Richard Deeming

Почему это не сработает?

Любой:

RootJson rootjson = new RootJson
{
    App = appIdentifier.AppName,
    ListSourcesFile = new List<SourcesFile>
    {
        new SourcesFile
        {
            Source = "Fdf",
        },
        new SourcesFile
        {
            Source = "Sdr",
        },
    },
};
или:
SourcesFile file = new SourcesFile();
file.Source = "Fdf";
rootjson.ListSourcesFile.Add(file);

file = new SourcesFile();
file.Source = "Sdr";
rootjson.ListSourcesFile.Add(file);
будет работать.

Amien90

Да ... это работает ... но мне нужно запустить цикл, чтобы добавить элементы "SourceFiles". Таким образом, каждое приложение содержит несколько исходных файлов. Что-то вроде этого (см. код ниже) .. но с обоими вашими кодами .. я не могу использовать цикл while

строка содержание = приложение.GetScript();
using (StringReader reader = new StringReader(contents))
{
строки;
в то время как ((строка = читатель.С readline()) != нуль)
{
Файл = Новый SourcesFile();
файл.Исходная строка;
рутджсон.ListSourcesFile.Добавить файл);
}
}

Richard Deeming

А почему бы и нет? Этот код должен работать. В чем же ошибка?

Amien90

моя плохая ... твоя правая ... я не туда положил ... }

Рейтинг:
1

Amien90

RootJson rootjson = новый RootJson
{
App = appIdentifier.Имя_приложения,
ListSourcesFile = новый список & lt;sourcesfile>
{
новый исходный файл
{
Источник = " Fdf",
},
новый исходный файл
{
Источник = " Sdr",
},
},
};
или:
Файл SourcesFile = новый файл SourcesFile();
файл.Источник = " Fdf";
рутджсон.ListSourcesFile.Добавить файл);

Файл = Новый SourcesFile();
файл.Источник = " Sdr";
рутджсон.ListSourcesFile.Добавить файл);