Tag: xmlserializer

为什么XmlSerializer不支持Dictionary?

只是好奇为什么字典不被XmlSerializer支持? 通过使用DataContractSerializer并将该对象写入XmlTextWriter ,您可以轻松解决这个问题,但是由于字典的特性使得XmlSerializer难以处理,因为它实际上是一个KeyValuePairs数组。 实际上,您可以将IDictionary<TKey, TItem>传递给期望IEnumerable<KeyValuePairs<TKey, ITem>> 。

C#XmlSerializer BindingFailure

我使用XmlSerializer在一行代码上得到了一个BindingFailure: XmlSerializer s = new XmlSerializer(typeof(CustomXMLSerializeObject)); 显示名称为CustomXMLSerializeObject.XmlSerializers的程序集无法加载到ID为1的AppDomain的“LoadFrom”绑定上下文中。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集XMLSerializeObject.XmlSerializers,Version = 1.4.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。 该系统找不到指定的文件。 错误是相当长的,并继续解释预绑定状态信息和它想要尝试find该文件的位置。 我试图去序化的自定义对象是相对简单的 – 只是一堆私有的整数和string具有公共访问器。 我有一个私人variables,这是另一个自定义的序列化类,但是只有私有string与公共访问器在其中。 尴尬的部分? 这只发生在我反序列化的时候。 当我序列化对象时,这行代码运行良好。 它工作正常,对象得到反序列化和完美填充。 不要真的注意到性能的损失或长时间的加载。 什么是这个警告(不是一个错误或例外,程序运行良好之后)? 为什么会发生? 如何防止它,而不是简单地禁用警告?

XML序列化和命名空间前缀

我正在寻找一种C#方式,我可以将一个类序列化为XML并添加一个名称空间,但是定义该名称空间将使用的前缀。 最终,我试图生成以下的XML: <myNamespace:Node xmlns:myNamespace="…"> <childNode>something in here</childNode> </myNamespace:Node> 我知道DataContractSerializer和XmlSerializer我都可以添加一个名称空间,但是他们似乎在内部生成了一个前缀,而我无法控制的东西。 我能够用这些序列化器(我可以使用其中之一)来控制它吗? 如果我无法控制名称空间的生成,那么我是否需要编写自己的XML序列化程序,如果是的话,编写它的最佳方法是什么?

使用XmlInclude或SoapInclude属性指定静态未知的types

使用.NET的XmlSerializer时,我遇到了一个非常奇怪的问题。 以下面的例子类: public class Order { public PaymentCollection Payments { get; set; } //everything else is serializable (including other collections of non-abstract types) } public class PaymentCollection : Collection<Payment> { } public abstract class Payment { //abstract methods } public class BankPayment : Payment { //method implementations } AFAIK,有三种不同的方法来解决由于序列化程序不知道派生types的Payment而导致的InvalidOperationException 。 1.将XmlInclude添加到Payment类定义中: 这是不可能的,因为所有的类都被包含为我无法控制的外部引用。 2.在创buildXmlSerializer实例期间传递派生types的types 不起作用。 3.为目标属性定义XmlAttributeOverrides以覆盖该属性的默认序列化(如本文所述) […]

集合属性的XML反序列化与代码默认值

对于应用程序configuration,我经常会创build一个具有应用程序configuration值的configuration类,然后将其反序列化为要使用的对象。 configuration对象通常是数据绑定到用户界面控件,以便用户可以更改和保存configuration。 configuration类通常具有分配给属性的默认值,所以始终存在默认configuration。 这工作得很好。 我最近有一个情况,我有一个提供一些默认path信息的string列表。 而我所看到的让我意识到我并不完全知道如何在XML反序列化过程中将对象属性填充到对象中。 所以我创build了一个简单的例子来显示行为。 以下是一个简单的类,有一些代码默认的属性。 [Serializable] public class TestConfiguration { public String Name { get { return mName; } set { mName = value; } }private String mName = "Pete Sebeck"; public List<String> Associates { get { return mAssociates; } set { mAssociates = value; } } private List<String> mAssociates = new […]

WCF错误“对象图中可以序列化或反序列化的项的最大数目是'65536'”

我在WCF调用中收到以下错误: 在对象图中可以序列化或反序列化的项目的最大数目是'65536' 我已经阅读了大量的论坛post,其中许多人提到修改app.config和web.config来指定新的行为,以允许更大的对象图。 我已经这样做了,这是我在这些文件中的: WPF项目上的App.Config: <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="false" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name=""> <dataContractSerializer maxItemsInObjectGraph="2147483646"/> </behavior> </endpointBehaviors> </behaviors> <services> <service name="digiPM.Shell.LogOutPMSEMRService.PMSEMRLogOutService"> <!–<endpoint address="" binding="basicHttpBinding" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" /> </baseAddresses> </host>–> <endpoint address="" binding="netTcpBinding" name="NetTcpBindingEndpoint" […]

将XML反序列化为使用dynamic的对象

是否有可能反序列化未知的XML像下面的对象? var xml = @"<Students><Student><Name>Arul</Name><Mark>90</Mark></Student></Students>"; var serializer = new XmlSerializer(typeof(DynamicObject)); dynamic students = serializer.Deserialize(new XmlTextReader(new StringReader(xml)));

内存泄漏使用StreamReader和XmlSerializer

我一直在谷歌search过去的几个小时,尝试不同的东西,但似乎无法在这个底部…. 当我运行这个代码时,内存使用量不断增长。 while (true) { try { foreach (string sym in stringlist) { StreamReader r = new StreamReader(@"C:\Program Files\" + sym + ".xml"); XmlSerializer xml = new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode")); XMLObj obj = (XMLObj)xml.Deserialize(r); obj.Dispose(); r.Dispose(); r.Close(); } } catch(Exception ex) { Console.WriteLine(ex.ToString()); } Thread.Sleep(1000); Console.Clear(); } XMLObj是一个自定义对象 [Serializable()] public class XMLObj: IDisposable { [XmlElement("block")] […]