JsonSerializer를 사용하여 이기종 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

TaylanKammer

다음 클래스를 고려하십시오.

class MethodCallDescription
{
    public string MethodName { get; set; }
    public object[] MethodParameters { get; set; }
}

다음 JSON을 해당 클래스의 인스턴스로 역 직렬화하고 싶습니다.

{
    "MethodName": "LaunchRockets",
    "MethodParameters": [ "Long Range", 100, true ]
}

이렇게하면 string, int 및 bool이 아닌 MethodParameters유형의 객체를 포함하는 배열이되는 것 같습니다 JsonElement.

JsonSerializer에게 MethodParameters예상 유형의 값을 포함하는 배열로 바꾸도록 어떻게 알릴 수 있습니까?

devNull

내가 건너 온 이 테스트 사용자 정의 사용하는 System.Text.Json 소스 코드 JsonConverter(원래의 객체 타입 대신을 유지하지) 객체 직렬화에 대한 모방 Newtonsoft.Json의 행동을.

다음은이를 달성하는 데 사용할 수있는 맞춤형 변환기의 슬림화 된 버전입니다.

class SystemObjectNewtonsoftCompatibleConverter : JsonConverter<object>
{
    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return reader.TokenType switch
        {
            JsonTokenType.True => true,
            JsonTokenType.False => false,
            JsonTokenType.Number => reader.GetInt32(),
            JsonTokenType.String => reader.GetString(),
            _ => Fallback(ref reader)
        };

        object Fallback(ref Utf8JsonReader reader)
        {
            // Use JsonElement as fallback.
            // Newtonsoft uses JArray or JObject.
            using JsonDocument document = JsonDocument.ParseValue(ref reader);
            return document.RootElement.Clone();
        }
    }

    public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) => 
        throw new InvalidOperationException("Should not get here.");
}

해당 변환기를 사용하는이 예제는 보존되는 객체 유형을 보여줍니다.

const string json = @"{
    ""MethodName"": ""LaunchRockets"",
    ""MethodParameters"": [ ""Long Range"", 100, true ]
}";

var options = new JsonSerializerOptions();
options.Converters.Add(new SystemObjectNewtonsoftCompatibleConverter());
MethodCallDescription instance = JsonSerializer.Deserialize<MethodCallDescription>(json, options);
Console.WriteLine(instance.MethodName);
Console.WriteLine(string.Join(", ", instance.MethodParameters.Select(p => (p, p.GetType().Name))));

출력 제공 :

LaunchRockets
(Long Range, String), (100, Int32), (True, Boolean)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

serde를 사용하여 JSON 배열을 구조체로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON 데이터를 모델 객체의 배열로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

@JsonProperty를 사용하여 JSON 응답을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C #을 사용하여 XML 파일에서 데이터를 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Jackson을 사용하여 키를 무시하는 객체로 JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C #에서 역 직렬화하는 동안 JSON 문자열에없는 속성의 초기화를 방지하는 방법은 무엇입니까?

분류에서Dev

JavaScriptSerializer. JSON에서 문자열 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Scala에서 playframework를 사용하여 json을 밀봉 특성으로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

UPW C #의 Web API에서 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C # 역 직렬화 된 JSON 가져 오기를 공개하는 방법은 무엇입니까?

분류에서Dev

역 직렬화 후 json을 호출하는 방법은 무엇입니까?

분류에서Dev

Windows Phone에서 JSON 데이터를 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

XML 배열 항목을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Solr / Lucene을 사용하여 맵을 직렬화 / 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

RenderedImage를 텍스트 문자열로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

이 AWS API를 F #으로 직렬화 / 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON을 사용하여 2D 배열을 역 직렬화하는 방법

분류에서Dev

단일 노드로 XML을 역 직렬화하기 위해 직렬화 가능한 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

Windows Phone에서 JSON 문자열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JavaScriptSerializer를 사용하여 JSON을 튜플으로 역 직렬화하는 방법

분류에서Dev

Newtonsoft.Json 라이브러리를 사용하여 문자열을 C #을 사용하여 사용자 지정 개체로 역 직렬화하는 방법

분류에서Dev

인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    serde를 사용하여 JSON 배열을 구조체로 역 직렬화하는 방법은 무엇입니까?

  2. 2

    JSON 데이터를 모델 객체의 배열로 역 직렬화하는 방법은 무엇입니까?

  3. 3

    정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

  4. 4

    @JsonProperty를 사용하여 JSON 응답을 역 직렬화하는 방법은 무엇입니까?

  5. 5

    C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

  6. 6

    JSON을 역 직렬화하는 방법은 무엇입니까?

  7. 7

    C #을 사용하여 XML 파일에서 데이터를 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  8. 8

    DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  9. 9

    DataGridView를 채우기 위해 JSON 파일을 DataTable로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  10. 10

    Jackson을 사용하여 키를 무시하는 객체로 JSON을 역 직렬화하는 방법은 무엇입니까?

  11. 11

    Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

  12. 12

    C #에서 역 직렬화하는 동안 JSON 문자열에없는 속성의 초기화를 방지하는 방법은 무엇입니까?

  13. 13

    JavaScriptSerializer. JSON에서 문자열 배열을 역 직렬화하는 방법은 무엇입니까?

  14. 14

    Scala에서 playframework를 사용하여 json을 밀봉 특성으로 역 직렬화하는 방법은 무엇입니까?

  15. 15

    UPW C #의 Web API에서 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

  16. 16

    C # 역 직렬화 된 JSON 가져 오기를 공개하는 방법은 무엇입니까?

  17. 17

    역 직렬화 후 json을 호출하는 방법은 무엇입니까?

  18. 18

    Windows Phone에서 JSON 데이터를 역 직렬화하는 방법은 무엇입니까?

  19. 19

    XML 배열 항목을 역 직렬화하는 방법은 무엇입니까?

  20. 20

    Solr / Lucene을 사용하여 맵을 직렬화 / 역 직렬화하는 방법은 무엇입니까?

  21. 21

    RenderedImage를 텍스트 문자열로 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  22. 22

    이 AWS API를 F #으로 직렬화 / 역 직렬화하는 방법은 무엇입니까?

  23. 23

    JSON을 사용하여 2D 배열을 역 직렬화하는 방법

  24. 24

    단일 노드로 XML을 역 직렬화하기 위해 직렬화 가능한 클래스를 만드는 방법은 무엇입니까?

  25. 25

    Windows Phone에서 JSON 문자열을 역 직렬화하는 방법은 무엇입니까?

  26. 26

    JavaScriptSerializer를 사용하여 JSON을 튜플으로 역 직렬화하는 방법

  27. 27

    Newtonsoft.Json 라이브러리를 사용하여 문자열을 C #을 사용하여 사용자 지정 개체로 역 직렬화하는 방법

  28. 28

    인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

  29. 29

    인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

뜨겁다태그

보관