역 직렬화 참조주기는 데이터를 생성자로 가져 오지 않습니다.

가브리엘 안톤

다음 시나리오 (Newtonsoft.Json)가 있습니다.

public class SubElement
{
    [JsonConstructor]
    public SubElement(string name, Element parent)
    {
        if (string.IsNullOrEmpty(name))
        {
            throw new ArgumentException("message", nameof(name));
        }

        Name = name;
        Parent = parent ?? throw new ArgumentNullException(nameof(parent));
    }
    public string Name { get;private set; }
    public Element Parent { get; }
}

[JsonObject(IsReference =true)]
public class Element
{
    [JsonConstructor]
    public Element(string name, IList<SubElement> subelements)
    {
        Name = name;
        Subelements = subelements;
    }
    public string Name { get; set; }
    public IList<SubElement> Subelements { get; }
}

Element element = new Element("test", new List<SubElement>());
element.Subelements.Add(new SubElement("first", element));
element.Subelements.Add(new SubElement("second", element));
string serialized = JsonConvert.SerializeObject(element);
Console.WriteLine(serialized);
Element deserialized = JsonConvert.DeserializeObject<Element>(serialized);

deserialization 프로세스에서 SubElement 생성자 는 직렬화 된 데이터에서 제대로 저장되지만 부모 요소 가 null 인 상태로 ivok 됩니다. 순환 참조를 관리하기 위해 [JsonObject (IsReference = true)] 속성을 사용했지만 역 직렬화가 작동하는 데 충분하지 않은 것 같습니다.

시나 트르

부모에 대한 참조를 포함하는 트리와 유사한 구조를 직렬화 / 역 직렬화하려고합니다.

문제는 [JsonConstructor]아이들을 부를 때 부모가 아직 건설되지 않았다는 것입니다. 그러나 속성을 deserialize하는 경우에는 중요하지 않습니다 (이 경우 매개 변수없는 생성자가 필요합니다).

[JsonObject(IsReference = true)]
public class Element
{
    [JsonProperty] // required for private setter
    public string Name { get; private set; }
    [JsonProperty]
    public IList<SubElement> Ports { get; private set; }

    [JsonConstructor] // required for private constructor
    Element() { }

    ... // your public constructors (not used for serialization)
}

public class SubElement
{
    [JsonProperty]
    public string Name { get; private set; }
    [JsonProperty]
    public Element Parent { get; private set; }

    [JsonConstructor]
    SubElement() { }

    ...
}

나는 당신의 아키텍처를 유지하려고 노력했습니다. 사용 참고 문헌 : 개인 세터를 역 직렬화 , 개인 생성자를 역 직렬화 .

json은 동일하게 보입니다.

{ "$ id": "1", "Name": "test", "Ports": [{ "Name": "first", "Parent": { "$ ref": "1"}}, { " 이름 ":"second ","Parent ": {"$ ref ":"1 "}}]}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

역 직렬화 할 때 NonSerialized 특성이있는 개체가 생성되지 않습니다.

분류에서Dev

상자 크기를 조정 한 후 Gridster 직렬화 데이터를 가져 오지 않음

분류에서Dev

역 직렬화 된 JSON 데이터를 표시하지 않는 목록 상자

분류에서Dev

내구성있는 엔터티는 역 직렬화하지 않습니다.

분류에서Dev

Json 문자열이 역 직렬화되지 않습니다.

분류에서Dev

역 직렬화 : 사용자 정의 클래스에서 데이터 가져 오기

분류에서Dev

이 XML 파일을 역 직렬화하고 데이터 가져 오기

분류에서Dev

위도 / 경도를 가져 오기 위해 MySQL에서 다각형 데이터를 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Xml을 개체로 역 직렬화하는 동안 오류가 발생했습니다. {<string xmlns = 'http : //tempuri.org/'>가 예상되지 않았습니다.}

분류에서Dev

모델 데이터를 직렬화하면 TypeError "ListSerializer 유형의 오브젝트가 JSON 직렬화 가능하지 않습니다."가 발생합니다.

분류에서Dev

WebAPI v2 XMLFormatter가 속성 가져 오기를 직렬화하지 않음

분류에서Dev

JSON 역 직렬화가 계속 null 참조 예외를 가져옵니다.

분류에서Dev

인터페이스를 구현하는 클래스 유형의 객체를 역 직렬화하는 방법 (JSON) : 오류 매개 변수없는 생성자가 정의되지 않았습니까?

분류에서Dev

C #에서 역 직렬화하지 않고 JSON 문자열에서 특정 필드 가져 오기

분류에서Dev

PHP 자바 스크립트 양식 직렬화 데이터 가져 오기 정의되지 않은 색인

분류에서Dev

JsonUtility로 데이터를 역 직렬화 할 수 없습니다.

분류에서Dev

Protofuf C ++-역 직렬화 된 메시지에 데이터가 없습니다.

분류에서Dev

SignalR이 사용자 지정 DataMember 이름을 직렬화 / 역 직렬화하지 않습니다.

분류에서Dev

JSON을 C # 개체로 역 직렬화하는 데 문제가 있습니다.

분류에서Dev

DateTime 문자열 직렬화 및 역 직렬화는 UTC에서 작동하지 않습니다.

분류에서Dev

일부 XML 태그가 역 직렬화되지 않는 이유

분류에서Dev

다양한 데이터 구조로 JSON 역 직렬화

분류에서Dev

SerializationException 가져 오기 : '<> f__AnonymousType2`가 직렬화 가능으로 표시되지 않았습니다.

분류에서Dev

XMLSerializer가 올바르게 직렬화되지만 역 직렬화 할 때 TargetInvocationException이 발생합니다.

분류에서Dev

XMLSerializer가 올바르게 직렬화되지만 역 직렬화 할 때 TargetInvocationException이 발생합니다.

분류에서Dev

Xml을 List <T>로 역 직렬화-xmlns = ''가 예상되지 않았습니다.

분류에서Dev

JSON.NET 역 직렬화가 setter를 트리거하지 않습니다.

분류에서Dev

역 직렬화를 원하지 않는 JSON 문자열

분류에서Dev

역 직렬화하는 동안 POCO 속성과 일치하지 않는 나머지 JSON 데이터를 어떻게 든 포착 할 수 있습니까?

Related 관련 기사

  1. 1

    역 직렬화 할 때 NonSerialized 특성이있는 개체가 생성되지 않습니다.

  2. 2

    상자 크기를 조정 한 후 Gridster 직렬화 데이터를 가져 오지 않음

  3. 3

    역 직렬화 된 JSON 데이터를 표시하지 않는 목록 상자

  4. 4

    내구성있는 엔터티는 역 직렬화하지 않습니다.

  5. 5

    Json 문자열이 역 직렬화되지 않습니다.

  6. 6

    역 직렬화 : 사용자 정의 클래스에서 데이터 가져 오기

  7. 7

    이 XML 파일을 역 직렬화하고 데이터 가져 오기

  8. 8

    위도 / 경도를 가져 오기 위해 MySQL에서 다각형 데이터를 역 직렬화하는 방법은 무엇입니까?

  9. 9

    Xml을 개체로 역 직렬화하는 동안 오류가 발생했습니다. {<string xmlns = 'http : //tempuri.org/'>가 예상되지 않았습니다.}

  10. 10

    모델 데이터를 직렬화하면 TypeError "ListSerializer 유형의 오브젝트가 JSON 직렬화 가능하지 않습니다."가 발생합니다.

  11. 11

    WebAPI v2 XMLFormatter가 속성 가져 오기를 직렬화하지 않음

  12. 12

    JSON 역 직렬화가 계속 null 참조 예외를 가져옵니다.

  13. 13

    인터페이스를 구현하는 클래스 유형의 객체를 역 직렬화하는 방법 (JSON) : 오류 매개 변수없는 생성자가 정의되지 않았습니까?

  14. 14

    C #에서 역 직렬화하지 않고 JSON 문자열에서 특정 필드 가져 오기

  15. 15

    PHP 자바 스크립트 양식 직렬화 데이터 가져 오기 정의되지 않은 색인

  16. 16

    JsonUtility로 데이터를 역 직렬화 할 수 없습니다.

  17. 17

    Protofuf C ++-역 직렬화 된 메시지에 데이터가 없습니다.

  18. 18

    SignalR이 사용자 지정 DataMember 이름을 직렬화 / 역 직렬화하지 않습니다.

  19. 19

    JSON을 C # 개체로 역 직렬화하는 데 문제가 있습니다.

  20. 20

    DateTime 문자열 직렬화 및 역 직렬화는 UTC에서 작동하지 않습니다.

  21. 21

    일부 XML 태그가 역 직렬화되지 않는 이유

  22. 22

    다양한 데이터 구조로 JSON 역 직렬화

  23. 23

    SerializationException 가져 오기 : '<> f__AnonymousType2`가 직렬화 가능으로 표시되지 않았습니다.

  24. 24

    XMLSerializer가 올바르게 직렬화되지만 역 직렬화 할 때 TargetInvocationException이 발생합니다.

  25. 25

    XMLSerializer가 올바르게 직렬화되지만 역 직렬화 할 때 TargetInvocationException이 발생합니다.

  26. 26

    Xml을 List <T>로 역 직렬화-xmlns = ''가 예상되지 않았습니다.

  27. 27

    JSON.NET 역 직렬화가 setter를 트리거하지 않습니다.

  28. 28

    역 직렬화를 원하지 않는 JSON 문자열

  29. 29

    역 직렬화하는 동안 POCO 속성과 일치하지 않는 나머지 JSON 데이터를 어떻게 든 포착 할 수 있습니까?

뜨겁다태그

보관