adhikar patil Ответов: 2

Я хочу прочитать данные файла json с определенным массивом объектов json один за другим, используя цикл foreach in ASP.NET ядро.


Привет,
Я хочу прочитать данные файла json с определенным массивом объектов json один за другим с помощью цикла Foreach и вставить в базу данных в Asp.net ядро.

У меня есть файл MasterData.json

{ 
"M203StructureKind": [
{
"Code": "1",
"Description": "BRIDGE"
},
{
"Code": "2",
"Description": "CULVERT"
},
{
"Code": "3",
"Description": "TUNNEL"
},
{
"Code": "4",
"Description": "TRAIL BRIDGE"
},
{
"Code": "5",
"Description": "OTHER"
}
]
}


Итак, теперь я хочу прочитать один за другим и вставить в базу данных. Ниже приведен мой код

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

[HttpPut("copyMasterData/{id}")]
public async Task<IActionResult> CopyMasterData(int id, bool isCopiedData)
{
try
{
var folderDetails = Path.Combine(Directory.GetCurrentDirectory(), $"wwwroot\\{"MasterData\\masterdata.json"}");
var JSON = System.IO.File.ReadAllText(folderDetails);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(JSON);
 
var response = 0;

foreach (var item in jsonObj["M203structureKind"])
{
var m203StructureKind = new M203structureKind
{ 
Code = item["Code"].ToString(),
Description = item["Description"].ToString(),
AgencyId = id,
IsActive = true,
IsDeleted = false,
AddedBy = User.GetUserId(),
ModifiedBy = User.GetUserId()
AddedOn = DateTime.Now,
ModifiedOn = DateTime.Now
};

response = await _m203structkindService.AddAsync(m203StructureKind);
} 
return response > 0 ? Ok(new { message = "Agency details added successfully." }) : StatusCode(500, "An error occured while adding agency details. Please try again...");
}
catch (Exception ex)
{
return StatusCode(500, ResponseMessages.GetErrorMessage(ResponseMessages.MessageType.Add, ex.Message));
}
}

Richard Deeming

В чем проблема с кодом, который вы разместили?

adhikar patil

Я хочу получить M203StructureKind objects json array один за другим для вставки данных в таблицу базы данных, но дает мне исключение, когда я иду с циклом. Поэтому, пожалуйста, дайте мне решение для чтения массива конкретных объектов один за другим.

Richard Deeming

А исключение есть?

2 Ответов

Рейтинг:
19

Richard Deeming

На первый взгляд, вы получаете NullReferenceException потому что вы указали неверное имя для объекта недвижимости.

Ваш файл JSON имеет: M203StructureKind
Ваш код C# ищет: M203structureKind
Обратите внимание на другой случай на первой букве "S".

JSON основан на Javascript и поэтому чувствителен к регистру. Измените свой код, чтобы использовать правильный регистр, и вы сможете читать элементы из файла JSON:

foreach (var item in jsonObj["M203StructureKind"])

NB: Если это не та ошибка, которую вы получаете, то вам нужно предоставить нам полную информацию об исключении.


adhikar patil

Привет,
Я могу массовая вставка данных в таблицу из JSON-данных с использованием и EntityFramework основной репозиторий

Рейтинг:
1

Vincent Maverick Durano

Я бы рекомендовал вам создать строго типизированный класс для вашего объекта JSON следующим образом:

public class M203StructureKind  
{  
    public string Code { get; set; }  
    public string Description { get; set; }  
}  
  
public class RootObject  
{  
    public List<M203StructureKind> M203StructureKind { get; set; }  
}  


Затем вы должны быть в состоянии десериализовать его, как показано ниже:

var jsonStirng = "{   \"M203StructureKind\":[      {         \"Code\":\"1\",         \"Description\":\"BRIDGE\"      },      {         \"Code\":\"2\",         \"Description\":\"CULVERT\"      },      {         \"Code\":\"3\",         \"Description\":\"TUNNEL\"      },      {         \"Code\":\"4\",         \"Description\":\"TRAIL BRIDGE\"      },      {         \"Code\":\"5\",         \"Description\":\"OTHER\"      }   ]}";  
  
var root = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(jsonStirng);  
  
foreach(var item in root.M203StructureKind)  
{  
    var code = item.Code;  
    var desc = item.Description;  
  
    //Your DB INSERT logic here  
}


Таким образом, вам не нужно жестко кодировать атрибут, к которому вы хотите получить доступ из объекта JSON.


adhikar patil

Привет,
Могу ли я вставить массовые данные в таблицу из данных json с помощью entityframework core, потому что у меня слишком много таблиц, и я хочу вставить массовые данные из файла json, не используя цикл foreach