JSON의 직렬화 및 역 직렬화에 문제가 있습니다. 다음과 같은 JSON 파일에서 읽을 두 가지 작업을 수행했습니다.
[
{
"ID": 1,
"OIB": 123456789,
"ime": "name",
"prezime": "surname",
"grad": "city"
}
]
이제 새 사용자 정보가있는 ID 2의 다른 클라이언트를 추가해야합니다. 이 JSON 파일을 문제없이 읽을 수 있지만 같은 파일에 쓰는 데 갇혀 있습니다.
public struct Klijent
{
public int ID { get; set; }
public long OIB { get; set; }
public string ime { get; set; }
public string prezime { get; set; }
public string grad { get; set; }
}
JSON의 "FetchClient"
public static List<Klijent> DohvatiKlijente()
{
List<Klijent> lKlijent = new List<Klijent>();
StreamReader klijent = new StreamReader("x");
string sJson = "";
using (klijent)
{
sJson = klijent.ReadToEnd();
lKlijent = JsonConvert.DeserializeObject<List<Klijent>>(sJson);
}
return lKlijent;
}
JSON에 "AddClient"
OIB -> personal identificator
ID -> should go +1 with every entry of client
grad -> city
ime -> name
prezime -> surname
public static void DodavanjeKlijenata()
{
Console.Write("Unesite OIB klijenta: ");
string pOIB = Console.ReadLine();
long nullOIB = 0;
long.TryParse(pOIB, out nullOIB);
int id = 0;
Console.Write("Unesite ime klijenta: ");
string ime1 = Console.ReadLine();
Console.Write("Unesite prezime klijenta: ");
string prezime1 = Console.ReadLine();
Console.Write("Unesite grad klijenta: ");
string grad1 = Console.ReadLine();
List<Klijent> lKlijent = DohvatiKlijente();
foreach (var Klijent in lKlijent)
{
id = Klijent.ID + 1;
}
Klijent dKlijent = new Klijent()
{
ID = id,
OIB = nullOIB,
ime = ime1,
prezime = prezime1,
grad = grad1
};
var serializer = new JsonSerializer();
using (var sw = new StreamWriter("x"))
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, dKlijent);
}
}
이 코드는 작동하지만 JSON 파일이 한 줄로만되어있을 때마다 삭제되는 것 같습니다. 여러 줄로 나누고 싶습니다.
감사합니다 :)
여기에서해야 할 두 가지가 있습니다
새 클라이언트가 기존 목록에 추가되었는지 확인
이를 위해 새 클라이언트를 목록에 추가 할 수 있습니다.
lKlijent.Add(dKlijent);
이제 목록을 직렬화해야합니다. lKlijent
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, lKlijent);
}
서식
포맷을 위해 포맷 설정을 사용할 수 있습니다. 예를 들면
var serializer = new JsonSerializer() { Formatting = Formatting.Indented} ;
추가 댓글
1. ID 계산
다음 루프를 사용하여 새 ID를 계산하는 대신
foreach (var Klijent in lKlijent)
{
id = Klijent.ID + 1;
}
Enumerable.Last()
목록에서 마지막 클라이언트를 가져 오는 데 사용할 수 있습니다 . 예를 들면
var id = lKlijent?.Any()!=true? 0:lKlijent.Last().ID;
2. Get Clients 메서드 다시 작성
이 DohvatiKlijente
메서드는 다음과 같이 다시 작성할 수 있습니다.
public static List<Klijent> DohvatiKlijente()
{
return JsonConvert.DeserializeObject<List<Klijent>>(File.ReadAllText("C:\\Users\\Hrvoje\\Desktop\\Polica Osiguranja MAIN\\Polica Osiguranja\\klijent.json"));
}
마찬가지로 파일에 다시 쓰기는 다음과 같이 단순화 할 수 있습니다.
var jsonString = JsonConvert.SerializeObject(lKlijent,Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(outputFilePath,jsonString);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다