public class Model
{
// required property 지정할 방법 고민할 것
private int? data1;
private int? data2;
public Model(int? data1, int? data2)
{
this.Data1 = data1;
this.Data2 = data2;
}
public int? Data1
{
// 기본값 할당이 필요할때 어떻게 할지
get => data1;
set => data1 = value;
}
public int? Data2
{
get => data2;
set => data2 = value;
}
}
public class Program
{
public static T ReadFile<T>(string filename) where T : class
{
if (File.Exists(filename))
{
var json = File.ReadAllText(filename);
if (!string.IsNullOrEmpty(json))
{
return JsonConvert.DeserializeObject<T>(json);
}
}
return null;
}
public static async Task WriteFileAsync<T>(string fullFileName, T jsonObject)
{
var directoryName = Path.GetDirectoryName(fullFileName);
if (directoryName != null && !string.IsNullOrEmpty(directoryName))
{
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
}
using (var file = File.CreateText(fullFileName))
{
using (var writer = new JsonTextWriter(file))
{
string json = JsonConvert.SerializeObject(jsonObject, Formatting.Indented,
new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore } );
await writer.WriteRawAsync(json);
}
}
}
private async static void Run()
{
var model = ReadFile<Model>("test.json");
Console.WriteLine(model.Data1);
Console.WriteLine(model.Data2);
await WriteFileAsync("test.json", model);
var writtenModel = ReadFile<Model>("test.json");
Console.WriteLine(writtenModel.Data1);
Console.WriteLine(writtenModel.Data2);
}
static void Main(string[] args)
{
Run();
Thread.Sleep(100);
}
}
'C#' 카테고리의 다른 글
JsonHelper - Newtonsoft 이용 (0) | 2022.05.01 |
---|---|
Sliding Stream (0) | 2022.05.01 |
[WPF] 소스로 트레이 아이콘 - 2 (Forms 대신 Windows.Controls로) (0) | 2021.02.04 |
[WPF] 소스로 트레이 아이콘 - 1 (Windows.Forms) (0) | 2021.02.04 |
[C#] 백그라운드에서 키보드 입력 감지 이벤트 1 (HotKey Hooking) (0) | 2021.01.29 |