在C#中,如何在事先不知道类型的情况下使用XmlSerializer反序列化可能属于基类或任何派生类的对象?我的所有派生类都添加了额外的数据成员。我制作了一个简单的GUI,可以序列化和反序列化类对象。它会根据用户选择填充的字段将对象序列化为合适的继承类(甚至只是基类)。我对序列化没有任何问题;问题是反序列化。在事先不知道类的情况下,我怎么可能让XmlSerializer将数据反序列化为正确的派生类?我目前创建了一个XmlReader来读取XML文件的第一个节点并从中确定类,它似乎适合我的目的,但它似乎是一个非常不优雅的解决方案。我在下面发布了一些示例代码。有什么建议吗?BaseType
我想知道如何在使用XmlSerializer时为每个元素添加换行符?示例代码:XmlSerializerserializer=newXmlSerializer(typeof(xxx));using(XmlWriterxmlWriter=XmlWriter.Create("test.xml"){serializer.Serialize(xmlWriter,xxx);} 最佳答案 在创建XmlWriter时,传入一个XmlWriterSettingsIndent设置为true的对象。varxmlWriterSettings=newXml
我收到此消息,“字符串'7/22/200612:00:00AM'不是有效的AllXsd值。”,反序列化XML时,元素包含日期,这是属性应该映射到元素:[XmlElement("FEC_INICIO_REL",typeof(DateTime))]publicDateTime?FechaInicioRelacion{get;set;}我做错了什么吗?更新:这是XML:FinancieraPanameñaPREST.PERSONAL7/22/200612:00:00AM9/22/200812:00:00AM1160.00002PAGOSVOLUNTARIOS59.940011/15/2006
过去几个小时我一直在谷歌上搜索并尝试不同的东西,但似乎无法深入了解......当我运行这段代码时,内存使用量不断增加。while(true){try{foreach(stringsyminstringlist){StreamReaderr=newStreamReader(@"C:\ProgramFiles\"+sym+".xml");XmlSerializerxml=newXmlSerializer(typeof(XMLObj),newXmlRootAttribute("rootNode"));XMLObjobj=(XMLObj)xml.Deserialize(r);obj.Dispo
我正在构建一个与第三方交互的库。通信是通过XML和HTTPPosts进行的。那行得通。但是,无论使用该库的代码都不需要知道内部类。我的内部对象使用此方法序列化为XML:internalstaticstringSerializeXML(Objectobj){XmlSerializerserializer=newXmlSerializer(obj.GetType(),"some.domain");//settingsXmlWriterSettingssettings=newXmlWriterSettings();settings.Indent=true;settings.OmitXmlDe
我有一个包含大量Nullable属性的类,我希望将其作为属性序列化为XML。这显然是一个禁忌,因为它们被认为是“复杂类型”。因此,我改为实现*Specified模式,我在其中创建一个附加*Value和*Specified属性,如下所示:[XmlIgnore]publicint?Age{get{returnthis.age;}set{this.age=value;}}[XmlAttribute("Age")]publicintAgeValue{get{returnthis.age.Value;}set{this.age=value;}}[XmlIgnore]publicboolAgeVa
我正在序列化这样一个类publicMyClass{publicint?a{get;set;}publicint?b{get;set;}publicint?c{get;set;}}所有类型都可以为空,因为我希望在序列化此类对象时存储最少的数据。但是,当仅填充“a”进行序列化时,我得到以下xml3如何将其设置为仅获取非空属性的xml?所需的输出将是3我想排除这些空值,因为会有多个属性,并且这些属性存储在数据库中(是的,这不是我的决定)所以我想将未使用的数据保持在最低限度。 最佳答案 您使用specification忽略特定元素publi
我有一个类PersonList[XmlRoot("Persons")]PersonList:List当我将其序列化为XML时,默认情况下它会生成如下内容:......我的问题是需要做什么才能将输出中的元素Human更改为Person?所以输出将是:......以及,如何将上述XML反序列化为PersonList类对象?根据Nick的建议,这是我的测试代码:[XmlRoot("Persons")]publicclassPersons:List{}[XmlRoot("Person")]publicclassHuman{publicHuman(){}publicHuman(stringnam
假设我有一个简单的类,其中只有一个成员是一个字符串。publicclassAbc{privateStringtext;publicStringText{get{returnthis.text;}set{this.text=value;}}}现在,当我使用可疑的XmlSerializer对其进行序列化然后反序列化时,任何包含换行符('\r\n'或Environment.NewLine)的文本都会转换为'\n'。如何保留换行符? 最佳答案 不是XmlSerializer而是XmlWriter正在删除您的CR。要保留它,我们必须让作者将C
我能否让XmlSerializer在反序列化时忽略namespace(xmlns属性),这样无论是否添加该属性,或者即使该属性是伪造的都无关紧要?我知道来源永远是可信的,所以我不关心xmlns属性。 最佳答案 是的,您可以告诉XmlSerializer在反序列化期间忽略namespace。定义一个忽略命名空间的XmlTextReader。像这样://helperclasstoignorenamespaceswhende-serializingpublicclassNamespaceIgnorantXmlTextReader:XmlT