System.Text.Json-중첩 된 개체를 문자열로 역 직렬화

Kyrylo M

를 사용하여 System.Text.Json.JsonSerializer모델을 부분적으로 역 직렬화 하려고 하므로 속성 중 하나는 원본 JSON이 포함 된 문자열로 읽 힙니다.

public class SomeModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Info { get; set; }
}

예제 코드

var json = @"{
                 ""Id"": 1,
                 ""Name"": ""Some Name"",
                 ""Info"": {
                     ""Additional"": ""Fields"",
                     ""Are"": ""Inside""
                 }
             }";

var model = JsonSerializer.Deserialize<SomeModel>(json);

Info원본 JSON의 Info 개체를 문자열로 포함 하는 속성 인 모델을 생성해야 합니다.

{
    "Additional": "Fields",
    "Are": "Inside"
}

기본적으로 작동하지 않고 예외가 발생합니다.

System.Text.Json.JsonException : ---> System.InvalidOperationException : 'StartObject'토큰 유형의 값을 문자열로 가져올 수 없습니다.

지금까지 시도한 것 :

public class InfoToStringConverter : JsonConverter<string>
{
    public override string Read(
        ref Utf8JsonReader reader, Type type, JsonSerializerOptions options)
    {
        return reader.GetString();
    }

    public override void Write(
        Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        throw new NotImplementedException();
    }
}

모델에 다음과 같이 적용하십시오.

[JsonConverter(typeof(InfoToStringConverter))]
public string Info { get; set; }

옵션을 추가하십시오. JsonSerializer

var options = new JsonSerializerOptions();
options.Converters.Add(new InfoToStringConverter());
var model = JsonSerializer.Deserialize<SomeModel>(json, options);

그래도 동일한 예외가 발생합니다.

System.Text.Json.JsonException : ---> System.InvalidOperationException : 'StartObject'토큰 유형의 값을 문자열로 가져올 수 없습니다.

필요한 것을 요리하기위한 올바른 조리법은 무엇입니까? 를 사용하여 비슷한 방식으로 작동했습니다 Newtonsoft.Json.

최신 정보

저에게는 중첩 된 JSON 객체를 가능한 한 원본으로 유지하는 것이 중요합니다. 따라서 Dictionary바람직하지 않은 변경 사항을 도입하는 것이 두렵기 때문에 역 직렬화 및 직렬화와 같은 옵션을 피하고 싶습니다 .

Kyrylo M

.NET Framework에서 중첩 된 JSON 개체를 올바르게 읽는 방법을 찾았습니다 JsonConverter. 완전한 솔루션은 다음과 같습니다.

public class SomeModel
{
    public int Id { get; set; }

    public string Name { get; set; }

    [JsonConverter(typeof(InfoToStringConverter))]
    public string Info { get; set; }
}

public class InfoToStringConverter : JsonConverter<string>
{
    public override string Read(
        ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        using (var jsonDoc = JsonDocument.ParseValue(ref reader))
        {
            return jsonDoc.RootElement.GetRawText();
        }
    }

    public override void Write(
        Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        throw new NotImplementedException();
    }
}

코드 자체에는 옵션을 만들 필요조차 없습니다.

var json = @"{
                 ""Id"": 1,
                 ""Name"": ""Some Name"",
                 ""Info"": {
                     ""Additional"": ""Fields"",
                     ""Are"": ""Inside""
                 }
             }";

var model = JsonSerializer.Deserialize<SomeModel>(json);

Info속성 의 원시 JSON 텍스트 에는 가독성을 높이기 위해 예제에서 소개 한 추가 공백도 포함됩니다.

그리고 그의 대답에 @PavelAnikhouski가 언급 한 것처럼 모델 표현과 직렬화가 혼합되어 있지 않습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

System.Text.Json을 사용하여 배열 json 개체의 중첩 된 배열을 역 직렬화

분류에서Dev

JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

분류에서Dev

AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

분류에서Dev

System.Text.Json 개체 배열 역 직렬화

분류에서Dev

중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

분류에서Dev

System.Text.Json API 호출에서 중첩 된 개체 역 직렬화-데이터는 부모 JSON 속성에 래핑됩니다.

분류에서Dev

C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

분류에서Dev

xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

분류에서Dev

Newtonsoft Json.Net을 사용하여 문자열 화 된 (따옴표로 묶인) 중첩 된 개체 역 직렬화

분류에서Dev

중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

분류에서Dev

JSON.NET으로 중첩 된 JSON 응답 역 직렬화

분류에서Dev

중첩 된 JSON의 Unity 역 직렬화

분류에서Dev

중첩 된 JSON 역 직렬화

분류에서Dev

다시 역 직렬화하기 전에 문자열로 직렬화 된 개체에서 잠재적으로 중첩 된 문자열 바꾸기

분류에서Dev

System.Text.Json 사용자 지정 직렬화 / 역 직렬화

분류에서Dev

중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

분류에서Dev

C #에서 중첩 된 목록으로 JSON 역 직렬화

분류에서Dev

Json을 중첩 된 pojo로 역 직렬화

분류에서Dev

JSON 개체를 System.Guid 형식으로 역 직렬화

분류에서Dev

JSON에서 /에서 중첩 된 파생 개체를 사용하여 C # 데이터 개체 역 직렬화

분류에서Dev

중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

분류에서Dev

Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

분류에서Dev

System.Text.Json API를 사용하여 스트림을 개체로 역 직렬화하는 방법

분류에서Dev

Newtonsoft JSON이 내 json 파일의 중첩 된 개체를 역 직렬화하지 않습니다.

분류에서Dev

중첩 된 개체를 역 직렬화하는 Json.NET은 JsonProperty.Required를 무시합니다.

분류에서Dev

System.Text.Json : 자동 캐스팅으로 JSON 역 직렬화

분류에서Dev

C #에서 Newtonsoft를 사용하여 Json에서 중첩 된 개체의 효율적인 수동 역 직렬화

분류에서Dev

잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

분류에서Dev

json 문자열을 .NET 개체 목록으로 역 직렬화

Related 관련 기사

  1. 1

    System.Text.Json을 사용하여 배열 json 개체의 중첩 된 배열을 역 직렬화

  2. 2

    JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

  3. 3

    AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

  4. 4

    System.Text.Json 개체 배열 역 직렬화

  5. 5

    중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

  6. 6

    System.Text.Json API 호출에서 중첩 된 개체 역 직렬화-데이터는 부모 JSON 속성에 래핑됩니다.

  7. 7

    C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

  8. 8

    xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

  9. 9

    Newtonsoft Json.Net을 사용하여 문자열 화 된 (따옴표로 묶인) 중첩 된 개체 역 직렬화

  10. 10

    중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

  11. 11

    JSON.NET으로 중첩 된 JSON 응답 역 직렬화

  12. 12

    중첩 된 JSON의 Unity 역 직렬화

  13. 13

    중첩 된 JSON 역 직렬화

  14. 14

    다시 역 직렬화하기 전에 문자열로 직렬화 된 개체에서 잠재적으로 중첩 된 문자열 바꾸기

  15. 15

    System.Text.Json 사용자 지정 직렬화 / 역 직렬화

  16. 16

    중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

  17. 17

    C #에서 중첩 된 목록으로 JSON 역 직렬화

  18. 18

    Json을 중첩 된 pojo로 역 직렬화

  19. 19

    JSON 개체를 System.Guid 형식으로 역 직렬화

  20. 20

    JSON에서 /에서 중첩 된 파생 개체를 사용하여 C # 데이터 개체 역 직렬화

  21. 21

    중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

  22. 22

    Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

  23. 23

    System.Text.Json API를 사용하여 스트림을 개체로 역 직렬화하는 방법

  24. 24

    Newtonsoft JSON이 내 json 파일의 중첩 된 개체를 역 직렬화하지 않습니다.

  25. 25

    중첩 된 개체를 역 직렬화하는 Json.NET은 JsonProperty.Required를 무시합니다.

  26. 26

    System.Text.Json : 자동 캐스팅으로 JSON 역 직렬화

  27. 27

    C #에서 Newtonsoft를 사용하여 Json에서 중첩 된 개체의 효율적인 수동 역 직렬화

  28. 28

    잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

  29. 29

    json 문자열을 .NET 개체 목록으로 역 직렬화

뜨겁다태그

보관