Tag: xmlserializer

无法在C#中反序列化XML – InvalidOperationException

我有一个C#应用程序,在App.config文件中有一个自定义配置信息部分。 目前,我可以通过代码成功加载自定义信息。 但是,我也试图从数据库加载相同的配置信息。 为了做到这一点,我从App.config文件中获取了一串XML,我知道它正在工作。 这个XML字符串如下所示: 我试图将此XML反序列化为C#对象。 我已经定义了这样的对象: Departments.cs public class Departments : ConfigurationSection { private Departments() { } [ConfigurationProperty(“”, IsRequired = false, IsKey = false, IsDefaultCollection = true)] public DepartmentItemCollection Items { get { var items = base[“”] as DepartmentItemCollection; return items; } set { base[“items”] = value; } } public static Departments Deserialize(string xml) […]

在嵌套属性上使用XmlAttributeOverrides

我正在尝试使用XmlAttributeOverrides来控制在序列化类之后哪些类属性出现在xml中。 它适用于“根”类上的属性,但不适用于嵌套属性。 这是一个简单的例子来说明我想要完成的事情。 我的类层次结构如下: public class Main { public string Name { get; set; } public Location Address { get; set; } } public class Location { public string StreetAddress { get; set; } public Contact ContactInfo{ get; set; } } public class Contact { public string PhoneNumber { get; set; } public string EmailAddr […]

强制ASMX代理使用XmlSerializer而不是DataContractSerializer

我们获得了我们必须在项目中使用的外部SOAP服务。 所有这些都提供了WSDL数据,但其中很多都不是.NET服务(大多数都是用Java编写的)。 我们使用wsdl.exe工具生成了许多客户端代理。 这个工具做它应该做的事情,它创建代理供我们使用。 一旦我们尝试使用生成的代理调用这些服务上的方法,就会出现问题。 我们拦截所有SOAP请求以进行日志记录,XML数据看起来与WSDL模式中指定的不同。 例如,如果一个字段被称为“名称”,我们的代理将序列化为“nameField”。 我想这是因为名为“Name”的属性使用名为“nameField”的支持字段。 另一方面的服务显然无法解释这种命名约定。 如果我们的ASMX代理使用旧的XmlSerializer,这将不会发生,但由于某种原因,他们选择DataContractSerializer,这完全扰乱了序列化并破坏了客户端和服务之间的兼容性。 我的同事们已经使用手动构建XML数据,然后使用HttpWebRequest类发送它。 我认为这在2011年是完全不可接受的,这就是自动代理生成的目的。 我的问题是:为什么会发生这种情况? 为什么我们的代理使用DataContractSerializer,从而忽略了进程中的所有xml序列化属性? 有没有办法强迫他们再次使用XmlSerializer? 我们使用.NET 4.0。

无法以编程方式反序列化SOAP消息

当我尝试反序列化soap消息时,我得到以下exception。 我这样做是因为我有我想在测试中重用的响应文件。 我不能使用真实的服务或类似的东西,因为它不适合我们的测试框架的架构。 Test ‘MyUnitTestMethod’ failed: System.InvalidOperationException : There is an error in XML document (1, 2). —-> System.InvalidOperationException : was not expected. at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream) private const string _content = @” 0 name test1@mail.com “; /// [System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”, “2.0.50727.3082”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, […]

xml中的额外结束括号

我使用此示例将一些变量保存到xml文件: 如何将当前类设置为返回类型结果 这是我的设置文件代码: using System; using System.IO; using System.Xml.Serialization; namespace ssscc.Settings { public class AppSettings { public string ReceiptLine1 { set; get; } public string ReceiptLine2 { set; get; } public string ReceiptLine3 { set; get; } public string ReceiptLine4 { set; get; } public string ReceiptLine5 { set; get; } public string ReceiptLine6 { […]

XmlSerializer.Deserialize List 项目

我已经尝试了所有可以在SO和其他地方找到的解决方案,但似乎无法弄清楚为什么这不起作用。 将XML字符串直接反序列化为对象,该对象具有一个属性 – 一个List: [XmlTypeAttribute(AnonymousType = true)] public class UpdateData { [XmlArrayItem(ElementName = “Updates”)] public List Updates { get; set; } public UpdateData() { Updates = new List(); } } public class Update { [XmlElement(ElementName = “MemberID”)] public int MemberID { get; set; } [XmlElement(ElementName = “AnalysisID”)] public int AnalysisID { get; set; } [XmlElement(ElementName […]

C#System.Xml.Serialization自嵌套元素

我试图反序列化 同 [XmlRoot(“graph”)] class graph { List _children = new List(); [XmlElement(“node”)] public Node[] node { get { return _children.ToArray(); } set { foreach(Node n in value) children.add(n) } }; } class Node { List _children = new List(); [XmlElement(“node”)] public Node[] node { get { return _children.ToArray(); } set { foreach(Node n in value) […]

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

我的应用程序使用XmlSerializer保存一个类,然后在需要时通过再次反序列化来创建一个实例。 我想在我的构造函数逻辑中使用我的类的一些属性成员(在反序列化期间分配)。 可以假设首先分配属性,并且一旦分配了所有属性,就会调用构造函数吗? 继续讨论这个主题,是否有关于反序列化过程中发生的事件序列的文档?

从xmlserializer中删除编码

我使用以下代码创建一个xml文档 – XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(“”, “”); new XmlSerializer(typeof(docket)).Serialize(Console.Out, i, ns); 这非常适合创建没有命名空间属性的xml文件。 我想在根元素中也没有编码属性,但我找不到办法。 有没有人知道这是否可以做到? 谢谢

在XmlSerializer中使用generics

在C#中使用XML序列化时,我使用如下代码: public MyObject LoadData() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); using (TextReader reader = new StreamReader(settingsFileName)) { return (MyObject)xmlSerializer.Deserialize(reader); } } (以及类似的反序列化代码)。 它需要铸造而且不是很好。 有没有办法,直接在.NET Framework中使用generics与序列化? 也就是说写下这样的东西: public MyObject LoadData() { // Generics here. XmlSerializer xmlSerializer = new XmlSerializer(); using (TextReader reader = new StreamReader(settingsFileName)) { // No casts nevermore. return xmlSerializer.Deserialize(reader); } }