我使用的OpenAccess断开连接的模型。当我尝试反序列化与DataConractSerializer一个对象,这个对象的版本属性为0 - 但只有在XML。如果我调试代码和观看值 - 它是1(或2,3- ...)

如果我说串行化“INT温度= object.Version”前seriazlier可以保存该值。

有一个懒惰的问题,我敢肯定。我怎么能强迫阅读,而不显式调用/保存此值?

代码片段: 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