문제

OpenAccess 연결 해제 모델을 사용하고 있습니다.DataConractSerializer를 사용하여 개체를 역직렬화하려고 하면 이 개체의 Version 속성은 0이지만 XML에서만 가능합니다.코드를 디버깅하고 값을 보면 1(또는 2,3...)입니다.

직렬화 "int temp = object.Version" 전에 말하면 직렬화자는 값을 저장할 수 있습니다.

게으른 문제가 있다고 확신합니다.명시적인 호출 없이 이 값을 강제로 읽거나 저장하려면 어떻게 해야 합니까?

코드 조각: http://www.telerik.com/community/forums/orm/general-discussions/objectnetworkattacher-vs-datacontractserializer.aspx#775451

도움이 되었습니까?

해결책

객체의 .retrieve () 메소드를 호출하여 모든 게으른로드 된 필드를로드하고 직렬화에 필요한 모든 데이터가 있어야합니다. 도움이되기를 바랍니다.

다른 팁

그것은 다음과 같은 소리가 난다 [DataMember] 필드에 대해 설정되거나 필드를 기본값으로 설정하고 게으른 동작을 우회합니다.유형을 제어하는 ​​경우 아마도 [OnSerializing] 직렬화가 시작되기 전에 이 속성을 엿보는 메서드입니다.그렇게 하면 값이 있어야 하며 다른 곳에 코드를 넣을 필요가 없습니다.

유형이 생성되면 유형인지 확인하십시오. partial class.그렇다면 다른 것을 추가할 수 있습니다. partial class 동일한 이름(및 동일한 네임스페이스)을 갖고 [OnSerializing] 거기 방법이...

예(작동하려면 마지막 블록의 주석 처리를 제거하세요):

using System;
using System.Runtime.Serialization;
using System.Xml;

class Program {
    static void Main() {
        using (XmlWriter writer = XmlWriter.Create(Console.Out)) {
            new DataContractSerializer(typeof(Foo))
                .WriteObject(writer, new Foo());
        }       
    }
}

[DataContract]
partial class Foo {
    [DataMember(Name="Bar")]
    private int? bar;
    public int Bar {
        get {
            if (bar == null) bar = 27; // somthing lazy
            return bar.GetValueOrDefault();
        }
        set { bar = value; }
    }
}
/* UNCOMMENT THIS
partial class Foo {
    [OnSerializing]
    private void BeforeSerialize(StreamingContext ctx) {
        int tmp = Bar;
    }
}
*/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top