JSON Newtonsoft C # 다양한 유형의 객체 목록 역 직렬화

신자

데이터 클래스의 직렬화 및 역 직렬화가 필요한 기존보고 인터페이스에 대한 원격 연결을 구현해야합니다. 다음은 클래스 및 인터페이스의 단순화 된 버전입니다.

    public interface IBase
    {
        string Name { get; }
    }

    public interface IDerived1
    {
        int Value { get; }
    }

    public interface IDerived2
    {
        bool Value { get; }
    }

    public class Base : IBase
    {
        public string Name { get; protected set; }
    }

    public class Derived1 : Base, IDerived1
    {
        public int Value { get; protected set; }
    }

    public class Derived2 : Base, IDerived2
    {
        public bool Value { get; protected set; }
    }

입력 매개 변수로

IEnumerable<IBase> reportingData

따라서이 컬렉션에는 'Derived1'및 'Derived2'인스턴스의 개수와 조합이 포함될 수 있습니다. 그런 다음 컬렉션을 다음과 같이 직렬화합니다.

string serialisedReportingData = JsonConvert.SerializeObject( reportingData );

예를 들어 다음과 같습니다.

[{ "값": 11, "이름": "제품 번호"}, { "값": false, "이름": "출력 1 활성화 됨"}]

분명히이 데이터만으로는 개별 컬렉션 항목의 유형이 JSON에 없기 때문에 역 직렬화가 불가능합니다. 예를 들어 JSON의 형식 부분을 만들거나 역 직렬화 중에 사용할 추가 형식 컬렉션을 제공 할 수 있습니다.

처리하기 전에 CustomCreationConverter 오버로드를 사용했습니다.

JsonConvert.DeserializeObject<IEnumerable<Ixxx>>( ... );

그러나 이것은 IEnumerable 내의 단일 인터페이스 유형에만 적용됩니다. 위의 예제에는 IDerived1과 IDerived2가 있습니다.

내 질문 / 문제 :

a) 하나 이상의 인터페이스 유형을 다루는 CustomCreationConverter가 어떻게 작성 될 수 있는지 잘 모르겠고 여기에 유형을 가져 오는 방법을 모릅니다.

b) 입력으로받은 'IEnumerable reportingData'와 동일한 역 직렬화 출력을 제공하는 솔루션을 구현하는 방법에 대한 귀하의 제안을 사랑합니다.

가능한 경우 작업 코드 예제를 감사하겠습니다.

미리 감사드립니다, Christian

핀백

업데이트 : (dbc의 의견에서 영감을 얻음)

형식 이름으로 역 직렬화 할 때는 SerializationBinder를 사용해야 합니다. KnownTypesBinder에 대해서는 여기를 참조하십시오 . (Newtonsoft.Json 버전 10 이상이 필요합니다)

먼저 속성을 설정하려면 속성을 만들어야합니다 public. 그런 다음 a JsonSerializerSettings사용 하여 직렬화 / 비 직렬화 할 수 있습니다 .

List<IBase> loList = new List<IBase>();
loList.Add(new Base() { Name = "Base" });
loList.Add(new Derived1() { Name = "Derived1", Value = 3 });
loList.Add(new Derived2() { Name = "Derived2", Value = true });

KnownTypesBinder loKnownTypesBinder = new KnownTypesBinder()
{
    KnownTypes = new List<Type> { typeof(Base), typeof(Derived1), typeof(Derived2) }
};

IEnumerable<IBase> reportingData = loList.AsEnumerable();
JsonSerializerSettings loJsonSerializerSettings = new JsonSerializerSettings()
{
    TypeNameHandling = TypeNameHandling.Objects,
    SerializationBinder = loKnownTypesBinder
};

string lsOut = JsonConvert.SerializeObject(reportingData, loJsonSerializerSettings);
reportingData = JsonConvert.DeserializeObject<IEnumerable<IBase>>(lsOut, loJsonSerializerSettings);

그런 식으로 사용 JsonSerializerSettings하면 json 문자열에 유형 정보가 포함됩니다.

[{
        "$type": "Base",
        "Name": "Base"
    }, {
        "$type": "Derived1",
        "Value": 3,
        "Name": "Derived1"
    }, {
        "$type": "Derived2",
        "Value": true,
        "Name": "Derived2"
    }
]

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

객체 목록 직렬화 / 비 직렬화를위한 JSON Newtonsoft C # 모범 사례

분류에서Dev

다양한 유형의 객체를 포함하는 JSON 배열 역 직렬화

분류에서Dev

json newtonsoft : 문자열 목록을 포함하는 객체 역 직렬화

분류에서Dev

JSON 목록을 C #의 개체 목록으로 역 직렬화 할 수 없음

분류에서Dev

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

분류에서Dev

Newtonsoft JSON은 목록에서 입력하기 위해 역 직렬화합니다.

분류에서Dev

Json.net은 객체 목록을 역 직렬화하지 않습니다.

분류에서Dev

GSON은 Android에서 두 가지 유형의 객체로 목록을 역 직렬화합니다.

분류에서Dev

Newtonsoft.Json을 사용한 열거 형 역 직렬화

분류에서Dev

JSON을 C # 개체 목록으로 역 직렬화

분류에서Dev

JSON 개체를 .Net 목록으로 역 직렬화 (C #)

분류에서Dev

복잡한 Json 객체 역 직렬화

분류에서Dev

Newtonsoft JSON 문제로 목록 역 직렬화

분류에서Dev

C #의 JSON 배열을 목록으로 역 직렬화

분류에서Dev

C #에서는 간단한 JSON 개체를 정수 목록으로 역 직렬화합니다.

분류에서Dev

주어진 사전 JSON의 항목을 건너 뛰려면 Newtonsoft JSON 역 직렬화가 필요합니다.

분류에서Dev

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

분류에서Dev

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

분류에서Dev

C #의 목록이있는 개체에 XML 역 직렬화

분류에서Dev

MemoryStream에서 다양한 객체 유형을 효율적으로 역 직렬화

분류에서Dev

json.net은 C #에서 json 객체를 역 직렬화합니다.

분류에서Dev

객체를 포함하여 여러 유형을 포함하는 역 직렬화 된 목록의 JSON.net 액세스 값

분류에서Dev

spray-json을 사용한 Scala 케이스 객체의 JSON 역 직렬화

분류에서Dev

다양한 데이터 유형을 포함하는 JSON 배열을 단일 객체로 역 직렬화하는 방법

분류에서Dev

내 목록에는 직원의 JSON을 역 직렬화 한 후 단일 null 직원이 있습니다.

분류에서Dev

복잡한 유형을 단순 유형으로 직렬화 / 역 직렬화하는 Newtonsoft JSON 변환기를 구현하는 방법

분류에서Dev

목록 속성을 사용하여 JSON을 객체로 역 직렬화

분류에서Dev

복잡한 객체 목록을 JSON으로 직렬화

분류에서Dev

C # Newtonsoft.json을 사용하여 단 하나의 속성 (루트를 찾을 수 없음)에 대한 Json 응답을 역 직렬화합니다.

Related 관련 기사

  1. 1

    객체 목록 직렬화 / 비 직렬화를위한 JSON Newtonsoft C # 모범 사례

  2. 2

    다양한 유형의 객체를 포함하는 JSON 배열 역 직렬화

  3. 3

    json newtonsoft : 문자열 목록을 포함하는 객체 역 직렬화

  4. 4

    JSON 목록을 C #의 개체 목록으로 역 직렬화 할 수 없음

  5. 5

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

  6. 6

    Newtonsoft JSON은 목록에서 입력하기 위해 역 직렬화합니다.

  7. 7

    Json.net은 객체 목록을 역 직렬화하지 않습니다.

  8. 8

    GSON은 Android에서 두 가지 유형의 객체로 목록을 역 직렬화합니다.

  9. 9

    Newtonsoft.Json을 사용한 열거 형 역 직렬화

  10. 10

    JSON을 C # 개체 목록으로 역 직렬화

  11. 11

    JSON 개체를 .Net 목록으로 역 직렬화 (C #)

  12. 12

    복잡한 Json 객체 역 직렬화

  13. 13

    Newtonsoft JSON 문제로 목록 역 직렬화

  14. 14

    C #의 JSON 배열을 목록으로 역 직렬화

  15. 15

    C #에서는 간단한 JSON 개체를 정수 목록으로 역 직렬화합니다.

  16. 16

    주어진 사전 JSON의 항목을 건너 뛰려면 Newtonsoft JSON 역 직렬화가 필요합니다.

  17. 17

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

  18. 18

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

  19. 19

    C #의 목록이있는 개체에 XML 역 직렬화

  20. 20

    MemoryStream에서 다양한 객체 유형을 효율적으로 역 직렬화

  21. 21

    json.net은 C #에서 json 객체를 역 직렬화합니다.

  22. 22

    객체를 포함하여 여러 유형을 포함하는 역 직렬화 된 목록의 JSON.net 액세스 값

  23. 23

    spray-json을 사용한 Scala 케이스 객체의 JSON 역 직렬화

  24. 24

    다양한 데이터 유형을 포함하는 JSON 배열을 단일 객체로 역 직렬화하는 방법

  25. 25

    내 목록에는 직원의 JSON을 역 직렬화 한 후 단일 null 직원이 있습니다.

  26. 26

    복잡한 유형을 단순 유형으로 직렬화 / 역 직렬화하는 Newtonsoft JSON 변환기를 구현하는 방법

  27. 27

    목록 속성을 사용하여 JSON을 객체로 역 직렬화

  28. 28

    복잡한 객체 목록을 JSON으로 직렬화

  29. 29

    C # Newtonsoft.json을 사용하여 단 하나의 속성 (루트를 찾을 수 없음)에 대한 Json 응답을 역 직렬화합니다.

뜨겁다태그

보관