반응형
부정한 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
반응형
'programing' 카테고리의 다른 글
CORB(Cross-Origin Read Blocking) (0) | 2023.02.24 |
---|---|
환경 변수로 JSON 내보내기 (0) | 2023.02.24 |
봄에는 index.html의 모든 루트를 캐치합니다. (0) | 2023.02.24 |
Wordpress는 slug와 함께 분류법 이름을 가져옵니다. (0) | 2023.02.24 |
어레이가 php에서 비어 있으면 json_encode 함수가 중괄호 {}을(를) 반환하지 않음 (0) | 2023.02.24 |