相关疑难解决方法(0)

如何通过XML序列化来了解何时加载?

我正在尝试通过XML序列化加载一个对象树,此时它将加载对象,并非常愉快地创建树.我的问题围绕着这些类支持一定级别的审计这一事实.我希望能够做的是在每个对象加载完成后调用一些方法.

为了论证,假设我有一个相当通用的对象树,在不同的级别有不同的类,如:

 <Customer name="Foo Bar Inc.">
   <Office IsHq="True">
     <Street>123 Any Street</Street>
     <Town name="Anytown">
       <State name="Anystate">
         <Country name="My Country" />
       </State>
     </Town>
   </Office>
   <Office IsHq="False">
     <Street>456 High Street</Street>
     <Town name="Anycity">
       <State name="Anystate">
         <Country name="My Country" />
       </State>
     </Town>
   </Office>
 </Customer>
Run Code Online (Sandbox Code Playgroud)

有没有办法使用默认的序列化器(以类似的方式创建类似的方法ShouldSerializeFoo)来确定每个对象的加载何时完成?

编辑: 我应该指出,暴露类似于反序列化后OnLoaded()可以调用的方法的明显案例,让我感到"不好做".

编辑2: 为了讨论这是我当前的黑客 "方法",它适用于基本级别,但子城市节点仍然认为它需要随着更改保存(在现实世界中,对象模型要复杂得多) ,但这至少会编译,而不需要完整的源代码)

public class Office
{
    [XmlAttribute("IsHq")]
    public bool IsHeadquarters { get; set; }

    [XmlElement]
    public string Street { get; set; }

    [XmlElement]
    public Town Town { get; set; …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization xml-serialization

14
推荐指数
2
解决办法
1万
查看次数

XML序列化 - 何时使用DataContractSerializer/Binary/XMLSerialiser

我已经看了一会儿了

似乎不鼓励使用二进制序列化,因为对字段名称的任何更改都会破坏序列化=?不好

XMLSerializer是有问题的,因为您必须提供无参数构造函数和公共字段,尽管您可以更多地控制元素属性或元素及其命名

DataContractSerializer很好,但需要明确添加所有的分类,这是一种耻辱

但是我偶然发现NetDataContractSerializer没有这个限制.

如果你的目标是C#序列化并且对xml的大小没有很大的限制,那么NetDataContractSerializer总是可以去这里吗?

c# datacontractserializer xmlserializer

5
推荐指数
1
解决办法
5939
查看次数