특정 스키마로 JSON 데이터를 처리할 때 이를 강력한 형식의 데이터 클래스로 역직렬화하면 코드 유지 관리성과 명확성을 향상시킬 수 있습니다. 이 질문은 배열에 혼합 유형 값, 특히 정수와 문자열이 포함되어 있는 경우 이러한 데이터를 역직렬화하는 방법을 탐구합니다.
이러한 유형의 데이터를 역직렬화할 때 고려해야 할 두 가지 핵심 요소는 다음과 같습니다.
이러한 문제를 해결하기 위해 사용자 정의 역직렬화 변환기를 구현할 수 있습니다. 이 변환기는 Newtonsoft.Json의 ObjectToArrayConverter<T>
클래스를 활용하여 C#으로 구현됩니다.
<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter { // ... (为简洁起见,省略实现细节) }</code>
다음으로 Player 클래스를 정의하고 주석이 달린 속성을 사용하여 역직렬화되는 순서를 지정합니다.
<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))] public class Player { [JsonProperty(Order = 1)] public int UniqueID { get; set; } [JsonProperty(Order = 2)] public string PlayerDescription { get; set; } // ... (根据需要添加其他属性) }</code>
마지막으로 플레이어 데이터를 사용자 이름을 키로 사용하는 사전으로 나타내도록 최상위 ScoreboardResults
클래스를 조정해야 합니다.
<code class="language-csharp">public class ScoreboardResults { public int timestamp { get; set; } public int total_players { get; set; } public int max_score { get; set; } public Dictionary<string, Player[]> players { get; set; } }</code>
이제 사용자 정의 변환기와 주석이 달린 속성을 사용하여 JSON 데이터를 강력한 유형의 객체로 역직렬화할 수 있습니다.
<code class="language-json">{ "timestamp": 1473730993, "total_players": 945, "max_score": 8961474, "players": { "Player1Username": [ 121, "somestring", 679900, 5, 4497, "anotherString", "thirdString", "fourthString", 123, 22, "YetAnotherString"], "Player2Username": [ 886, "stillAstring", 1677, 1, 9876, "alwaysAstring", "thirdString", "fourthString", 876, 77, "string"] } }</code>
결과는 ScoreboardResults
개체의 사전을 포함하는 채워진 Player
개체가 되며, 각 개체는 해당 속성의 예상 값을 포함합니다.
이 수정된 출력은 원본 이미지를 유지하며 JSON 역직렬화 프로세스에 대한 더 간결하고 기술적으로 정확한 설명을 제공합니다. 코드 예제도 명확성을 위해 개선되었습니다.
위 내용은 혼합 유형 값의 JSON 배열을 강력한 유형의 C# 개체로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!