Лучший способ записи json файлов в C# и проверки кода - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть девушка, как это

    public class Params
    {
        public string FirstName;
        public string SecondName;
        public string Path;
        public long Count;
        public double TotalSize;
        public long Time;
        public bool HasError;

        public Params()
        {

        }
        public Params(string firstName, string secondName, string path, long count, double totalSize, long time, bool hasError)
        {
            FirstName = firstName;
            SecondName = secondName;
            Path = path;
            Count = count;
            TotalSize = totalSize;
            Time = time;
            HasError = hasError;
        }
}

У меня есть json класс, как это:

    public static class FileWriterJson
    {
        public static void WriteToJsonFile<T>(string filePath, T objectToWrite, bool append = true) where T : new()
        {
            TextWriter writer = null;
            try
            {
                var contentsToWriteToFile = JsonConvert.SerializeObject(objectToWrite);
                writer = new StreamWriter(filePath, append);
                writer.Write(contentsToWriteToFile);

            }
            finally
            {
                if (writer != null)
                    writer.Close();
            }
        }

        public static T ReadFromJsonFile<T>(string filePath) where T : new()
        {

            TextReader reader = null;
            try
            {
                reader = new StreamReader(filePath);
                var fileContents = reader.ReadToEnd();
                return JsonConvert.DeserializeObject<T>(fileContents);
            }
            finally
            {
                if (reader != null)
                    reader.Close();
            }
        }
}

Основная программа похожа на это

 var Params1 = new Params("Test", "TestSecondName", "Mypath",7, 65.0, 0, false);
 FileWriterJson.WriteToJsonFile<Params>("C:\\Users\\myuser\\bin\\Debug\\test1.json", Params1);
 FileWriterJson.WriteToJsonFile<Params>("C:\\Users\\myuser\\bin\\Debug\\test1.json", Params1);

Это мой test1. json:

{"FirstName": "Test", "SecondName": "TestSecondName", "Path": "Mypath", "Count": 7 , "TotalSize": 65,0, "Время": 0, "HasError" ложь} { "FirstName": "Тест", "SecondName": "TestSecondName", "Путь": "Mypath", "Count": 7, «TotalSize»: 65,0, «Time»: 0, «HasError»: false}

Как вы видите, у меня в файле записано два json объекта.

Что мне нужно сделать это:

void ReadAllObjects(){
//read the json object from the file
 // count the json objects - suppose there are two objects 
for (int i=0;i<2;i++){ 
//do some processing with the first object 
// if processing is successfull delete the object (i don't know how to delete the particular json object from file) 
 } }

но когда я читаю так

var abc =FileWriterJson.ReadFromJsonFile<Params>(
                            "C:\\Users\\myuser\\bin\\Debug\\test1.json");

, я получаю следующую ошибку:

"Дополнительный текст встречается после закончил чтение JSON содержимое: {. Path '', строка 1, позиция 155. "

Затем я использовал следующий код для чтения JSON файла

public static IEnumerable<T> FromDelimitedJson<T>(TextReader reader, JsonSerializerSettings settings = null)
{
    using (var jsonReader = new JsonTextReader(reader) { CloseInput = false, SupportMultipleContent = true })
    {
        var serializer = JsonSerializer.CreateDefault(settings);

        while (jsonReader.Read())
        {
            if (jsonReader.TokenType == JsonToken.Comment)
                continue;
            yield return serializer.Deserialize<T>(jsonReader);
        }
    }
}

}

, который работал хорошо для меня.

Теперь мне нужно следующее предложение:

1> когда я ставлю свой тест1. * 105 5 * данные в https://jsonlint.com/ там написано: Ошибка:

Parse error on line 9:
    ..."HasError": false} { "FirstName": "Tes
    ----------------------^
    Expecting 'EOF', '}', ',', ']', got '{'
    should i write into file in some other way.

2> Есть ли что-то лучшее для этого.

1 Ответ

1 голос
/ 20 апреля 2020

Вы записываете каждый объект отдельно в файл. Но то, что вы создаете, не является действительным JSON файлом, это просто текстовый файл с отдельными JSON объектами.

Чтобы сделать его действительным JSON, вам нужно поместить объекты в массив или список и затем сохраните это в файл.

var Params1 = new Params("Test", "TestFirstName", "Mypath",7, 65.0, 0, false);
var Params2 = new Params("Test 2", "TestSecondName", "Mypath",17, 165.0, 10, false);

List<Params> paramsList = new List<Params>();
paramsList .Add(Params1);
paramsList .Add(Params2);

FileWriterJson.WriteToJsonFile<List<Params>>("C:\\Users\\myuser\\bin\\Debug\\test1.json", paramsList);

FileWriter Json .WriteToJsonFile ("C: \ Users \ myuser \ bin \ Debug \ test1. json", Params1);

Тогда вы сможете прочитать его в ОК. Не забудьте прочитать в List<Params>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...