programing

부정한 C# 식별자의 원인이 되는 JSON 문자열을 해석하려면 어떻게 해야 합니까?

testmans 2023. 2. 24. 13:20
반응형

부정한 C# 식별자의 원인이 되는 JSON 문자열을 해석하려면 어떻게 해야 합니까?

NewtonSoft JSON Convert 라이브러리를 사용하여 JSON 문자열을 해석하고 C# 객체로 변환하고 있습니다.그런데 이 JSON 문자열로 C# 클래스를 만들 수 없기 때문에 매우 어색한 JSON 문자열이 발견되어 C# 객체로 변환할 수 없습니다.

여기 JSON 문자열이 있습니다.

{
"1": {
    "fajr": "04:15",
    "sunrise": "05:42",
    "zuhr": "12:30",
    "asr": "15:53",
    "maghrib": "19:18",
    "isha": "20:40"
},
"2": {
    "fajr": "04:15",
    "sunrise": "05:42",
    "zuhr": "12:30",
    "asr": "15:53",
    "maghrib": "19:18",
    "isha": "20:41"
 } 
}

이 JSON 문자열을 해석하기 위해 필요한 C# 클래스는 다음과 같습니다.

public class 1 {

    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}

public class 2 {

    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}

그러나 클래스 이름은 숫자로 시작할 수 없기 때문에 진정한 C# 클래스가 될 수 없습니다.

이런 종류의 json 문자열을 해석하는 방법을 제안해 주시면 감사하겠습니다.

사전으로 역직렬화할 수 있습니다.

public class Item
{
    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}

var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);

사전이 특정 사례에 가장 적합한 솔루션이지만, 질문 내용은 다음과 같이 해석될 수도 있습니다.

C#에서 사용할 수 없는 속성 이름을 가진 개체를 직렬화 해제하려면 어떻게 해야 합니까?

예를 들어, 만약 당신이

{
    "0": "04:15",
    "zzz": "foo"
}

해결책: 주석 사용:

public class Item
{
   [JsonProperty("0")]
   public string AnyName { get; set; }

   [JsonProperty("zzz")]
   public string AnotherName { get; set; }
}

다음 확장자를 사용할 수 있습니다.

public static class JsonExtensions
{
    public static Dictionary<string, T> ToObject<T>(this string json)
    {
        return JsonConvert.DeserializeObject<Dictionary<string, T>>(json);
    }

    public static string ToJson<T>(this T obj)
    {
        return JsonConvert.SerializeObject(obj);
    }
}

언급URL : https://stackoverflow.com/questions/24536533/how-can-i-parse-a-json-string-that-would-cause-illegal-c-sharp-identifiers

반응형