jjzjj

xmlSerializer

全部标签

c# - 为什么XmlSerializer可以序列化抽象类而不能序列化接口(interface)?

编辑这段代码应该可以说明整个问题:[XmlInclude(typeof(AThing1))]publicabstractclassAThing{publicabstractstringName{get;set;}}[XmlInclude(typeof(IThing1))]publicinterfaceIThing{stringName{get;set;}}publicclassAThing1:AThing{publicoverridestringName{get;set;}}publicclassIThing1:IThing{publicstringName{get;set;}}Lis

c# - 序列化和恢复未知类

基础项目包含一个抽象基类Foo。在单独的客户端项目中,有实现该基类的类。我想通过在基类上调用一些方法来序列化和恢复具体类的实例://Inthebaseproject:publicabstractclassFoo{abstractvoidSave(stringpath);abstractFooLoad(stringpath);}可以假设在反序列化时,所有需要的类都存在。如果可能的话,序列化应该用XML完成。使基类实现IXmlSerializable是可能的。我有点卡在这里。如果我对事情的理解是正确的,那么这只能通过向每个实现类的基类添加[XmlInclude(typeof(Unknown

c# - 我可以在运行时向对象属性添加属性吗?

例如,我想删除或更改以下属性属性或添加一个新属性。可能吗?[XmlElement("bill_info")][XmlIgnore]publicBillInfoBillInfo{get{returnbillInfo;}set{billInfo=value;}} 最佳答案 (编辑-我误读了原始问题)您不能添加实际属性(它们被嵌入到IL中);但是,对于XmlSerializer,您不必这样做-您可以在构造函数中为XmlSerializer提供额外的属性。但是,如果这样做,您确实需要小心缓存XmlSerializer实例,否则它会为每个实例

c# - 使用 XmlSerializer.Deserialize 进行反序列化时,何时调用类构造函数?

我的应用程序使用XmlSerializer保存了一个类,然后在需要时通过再次反序列化创建一个实例。我想在我的构造函数逻辑中使用我的类的一些属性成员(在反序列化期间分配)。假设首先分配属性是可以的,一旦分配了所有属性就会调用构造函数吗?继续讨论这个话题,是否有关于反序列化期间发生的事件顺序的文档? 最佳答案 不,假设属性将在构造函数运行时设置是不正确的。反之亦然。构造函数是创建对象实例时运行的第一段代码。在构造函数开始执行之前,不可能设置属性。XML反序列化过程大致如下所示调用无参构造函数将属性设置为其反序列化值解决此问题的一种方法是

c# - XmlSerialize 枚举标志字段

我有这个:[Flags]publicenumInfoAbonne{civilite,name,firstname,email,adress,country}publicclassFormulaire{privateInfoAbonne_infoAbonne{get;set;}publicFormulaire(){}}我想Xml序列化Formulaire如果我初始化:_infoAbonne=InfoAbonne.name|InfoAbonne.email;在我的Xml结果中,我只得到:email 最佳答案 即使您将Flags属性添加到

c# - 如何 XmlSerialize System.Drawing.Font 类

System.Drawing.Font类不是XML可序列化的,因为它没有默认(空)构造函数。尽管如此,是否有一些解决方法或替代方法来序列化Font? 最佳答案 编辑:我根据Regent更新了代码建议使用FontConverter,同时保留将SerializableFont用作常规Font的能力。publicclassSerializableFont{publicSerializableFont(){FontValue=null;}publicSerializableFont(Fontfont){FontValue=font;}[Xm

c# - xmlserializer 验证

我正在使用XmlSerializer反序列化Xml文件。但我发现生成的类xsd.exe只提供读取xml的能力,但没有验证。例如,如果文档中缺少一个节点,则生成的类的属性字段将为null,而不是像我预期的那样抛出验证异常。我怎样才能做到这一点?谢谢! 最佳答案 以下代码应在反序列化时针对架构进行验证。类似的代码可用于在序列化时根据模式进行验证。privatestaticResponseDeserializeAndValidate(stringtempFileName){XmlSchemaSetschemas=newXmlSchemaS

c# - XmlSerializer 在序列化动态加载的类型时抛出异常

我正在尝试使用System.Xml.Serialization.XmlSerializer来序列化动态加载(和编译的类)。如果我将有问题的类构建到主程序集中,一切都会按预期进行。但是,如果我从动态加载的程序集中编译和加载该类,XmlSerializer会引发异常。我做错了什么?我创建了以下.NET3.5C#应用程序来重现该问题:usingSystem;usingSystem.Collections.Generic;usingSystem.Xml.Serialization;usingSystem.Text;usingSystem.Reflection;usingSystem.CodeD

c# - 具有默认值的 XmlSerializer 和 List<T>

我在序列化和反序列化具有List类型成员的类时观察到一个奇怪的行为在构建时填充了默认值。与基于数组的属性不同,类型为List的属性不会在XmlSerializer反序列化时被清空。这是我的代码:publicclassProgram{publicclassConfig{publicConfig(){Test1=newList(){"A","B"};Test2=newString[]{"A","B"};}publicListTest1{get;set;}publicstring[]Test2{get;set;}}publicstaticvoidMain(){XmlSerializerxml

c# - mscorlib.XmlSerializers.DLL 的 FileNotFoundException,它不存在

我正在使用XmlSerializer反序列化mscorelib.dll中的特定类型XmlSerializerser=newXmlSerializer(typeof([.NettypeinSystem]));return([.NettypeinSystem])ser.Deserialize(newStringReader(xmlValue));这会在加载程序集时引发捕获的FileNotFoundException:"Couldnotloadfileorassembly'mscorlib.XmlSerializers,Version=2.0.0.0,Culture=neutral,Publ