Member 13888852 Ответов: 1

Сериализация и десириализация нескольких JSON в C#


У меня есть три txt-файла, которые содержат одни и те же данные Json, я хочу прочитать их все в объектах класса c# и перезаписать все объекты из значения текстового поля во всех файлах одновременно

короче говоря у меня есть эти поля общие во всех трех текстовых файлах
"время":"112429",
"код":"R123",
я хочу сохранить их значения в классе объектов c# из всех трех файлов одновременно
а затем перезаписать одни и те же значения объекта, предоставленные значением текстового поля для всех атрибутов, считываемых тремя различными файлами

код для чтения данных одного файла
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
           {
               _orderRequest = (OrderRequest)JsonReader.ReadRecord(fs, _recordManager, TicketingRecordNames.OrderRequest);
           }


мой класс объектов
public class OrderRequest
{
public string org;
public string raff;
public string time;
public string user;
public OrderRequest _orderRequest;
}


Файл 1 Сведения
{  
   "org":"OrgTest",
   "raff":"Raffle1",
  "time":"112828",
   "user":"User1",
  
}


Файл 2 Данные
{  
   "org":"OrgTest",
   "raff":"Raffle1",
  "time":"112828",
   "user":"User111",
  
}


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

я пробовал сериализацию пакетов newtonsoft json, но не смог загрузить несколько текстовых файлов json для чтения, а также не смог перезаписать значения объектов нескольких файлов

F-ES Sitecore

Возможно, вам придется либо загрузить содержимое трех файлов и объединить их в одну строку, которая затем может быть десериализована в один объект, либо создать три объекта для каждого из файлов для десериализации, а затем просто скопировать свойства из специфичных для файла объектов в ваш основной объект.

Member 13888852

но как я могу объединить три текстовых файла json данные в один

F-ES Sitecore

Теперь я вижу, что файлы имеют ту же самую стриктуру. Свойство может содержать только одно значение, если вы планируете иметь все данные из всех файлов в одном классе, вам лучше использовать какой-то список

публичный класс MyData
{
публичный список запросов & lt;OrderRequest> { get; set; }
}

Загрузите каждый файл в новый экземпляр OrderRequest и добавьте его в свойство Requests.

Graeme_Grant

Поставьте образец всех 3 и желаемый результат.

Один из методов состоит в том, чтобы загрузить каждый JSON-файл и десериализовать его в отдельные списки, а затем объединить все 3 в один. Теперь он готов для редактирования вашим пользователем.

Member 13888852

можете ли вы пожалуйста помочь с кодом для предоставления нескольких файлов
я использовал этот код для чтения одного файла
используя (файлового потока ФС = новый хранилище FileStream(Путь, содержит filemode.Открытия, Флагами Fileaccess.Читать))
{
_orderRequest = (OrderRequest)JsonReader.ReadRecord(fs, _recordManager, TicketingRecordNames.OrderRequest);
}

Graeme_Grant

Пожалуйста, обновите свой вопрос с помощью кода, чтобы мы могли видеть, что вы делаете...

У меня также есть подробный учебник здесь: Работа с JSON в C# и VB[^]

Member 13888852

я обновил код пожалуйста проконсультируйтесь

Graeme_Grant

Итак, все 3 файла имеют JSON в одном формате? А пользовательский ввод-это разрешение конфликтов, когда есть несколько записей с одним и тем же ключом? ie: пользователь выбирает, какие записи хранить?

Gerry Schmitz

Возможно, концепция "итерации" по 3 файлам для достижения того, что вы хотите, вам чужда. Смотрите раздел "for loop".

Или вы пытаетесь "объединить файлы"? С "дубликатами"или без них.

Вы пытаетесь лечить файлы журналов?

1 Ответов

Рейтинг:
0

Bimal pedini

Просто попробуйте сначала объединить все файлы json и сохранить их в одном файле Json, а затем сериализовать и десериализовать его.

bject o1 = JObject.Parse(@"{
  'FirstName': 'John',
  'LastName': 'Smith',
  'Enabled': false,
  'Roles': [ 'User' ]
}");
JObject o2 = JObject.Parse(@"{
  'Enabled': true,
  'Roles': [ 'User', 'Admin' ]
}");

o1.Merge(o2, new JsonMergeSettings
{
    // union array values together to avoid duplicates
    MergeArrayHandling = MergeArrayHandling.Union
});

string json = o1.ToString();
// {
//   "FirstName": "John",
//   "LastName": "Smith",
//   "Enabled": true,
//   "Roles": [
//     "User",
//     "Admin"
//   ]
// }