> 백엔드 개발 > C++ > 혼합 유형 값의 JSON 배열을 강력한 유형의 C# 개체로 역직렬화하는 방법은 무엇입니까?

혼합 유형 값의 JSON 배열을 강력한 유형의 C# 개체로 역직렬화하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-24 04:21:38
원래의
1040명이 탐색했습니다.

How to Deserialize a JSON Array of Mixed-Type Values into Strongly Typed C# Objects?

혼합 유형 값의 배열을 강력한 유형의 데이터로 역직렬화

특정 스키마로 JSON 데이터를 처리할 때 이를 강력한 형식의 데이터 클래스로 역직렬화하면 코드 유지 관리성과 명확성을 향상시킬 수 있습니다. 이 질문은 배열에 혼합 유형 값, 특히 정수와 문자열이 포함되어 있는 경우 이러한 데이터를 역직렬화하는 방법을 탐구합니다.

주요 고려사항

이러한 유형의 데이터를 역직렬화할 때 고려해야 할 두 가지 핵심 요소는 다음과 같습니다.

  1. 플레이어 컬렉션 처리: 플레이어 데이터는 사용자 이름으로 색인화되며 문자열과 정수가 혼합되어 포함됩니다. 이는 사용자 이름을 키로 사용하고 각 플레이어의 데이터를 나타내는 값 모음을 사용하여 사전 구조를 사용할 수 있음을 나타냅니다.
  2. 이름이 지정되지 않은 플레이어 속성: 플레이어 데이터는 이름이 지정되지 않은 값의 특정 시퀀스로 구성됩니다. 이러한 값을 Player 개체의 속성에 할당하여 올바른 속성에 매핑되도록 하는 메커니즘이 필요합니다.

맞춤형 변환기 구현

이러한 문제를 해결하기 위해 사용자 정의 역직렬화 변환기를 구현할 수 있습니다. 이 변환기는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿