天道酬勤,学无止境

将 XML 字符串反序列化为对象 VB.NET(Deserialize XML string to Object VB.NET)

问题

我在网上看过很多例子,但要么我看不懂应用程序,要么这个例子与我的太不同,我无法转置。 我有一个 XML

<Interfaces>
    <Interface>
        <InterfaceCode>987</InterfaceCode>
        <AccessID>asdf</AccessID>
        <Password>654321</Password>
    </Interface>
    <Interface>
        <InterfaceCode>789</InterfaceCode>
        <AccessID>      </AccessID>
        <Password>      </Password>
    </Interface>
</Interfaces>

以及以下课程

<Serializable(), XmlRoot("Interfaces"), XmlType("Interfaces")>
Public Class InterfacesModel
    Property Interfaces As New List(Of InterfaceModel)
End Class

<Serializable(), XmlType("Interface")>
Public Class InterfaceModel
    Property InterfaceCode As String
    Property AccessID As String
    Property Password As String
End Class

下面的代码生成一个InterfacesModel一个空Interfaces列表:

Dim str As String = xmlString
Dim interfaces As InterfacesModel

Dim serializer As New XmlSerializer(GetType(InterfacesModel))
Using reader As TextReader = New StringReader(str)
     interfaces = serializer.Deserialize(reader)
End Using

我希望它将接口填充为列表(InterfaceModel),以便我可以对每个接口执行一个操作并对每个接口执行一些操作。

回答1

您的财产需要XmlElement("Interface") 。 此外,您可以摆脱 XmlType 属性。 我不认为那些人在为你做任何事。

<Serializable(), XmlRoot("Interfaces")>
Public Class InterfacesModel
    <XmlElement("Interface")> Property Interfaces As New List(Of InterfaceModel)
End Class

<Serializable()>
Public Class InterfaceModel
    Property InterfaceCode As String
    Property AccessID As String
    Property Password As String
End Class
回答2

当我编写可序列化的类时,我不使用标签,我只是使用这样的东西,它的工作原理是一样的

<Serializable>
Public Class Interfaces
    Public interface as InterfaceModel() 'The () Defines an array of InterFaceModels
End Class

<SerialzableAttribute>
Public Class InterfaceModel
    Public InterFaceCode As String
    Public AccessID As String
    Public Password As String
End Class

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 将 XML 部分反序列化为对象(Partially deserialize XML to Object)
    问题 我有一些 XML 反序列化为业务对象。 我正在使用 XmlSerializer.Deserialize 这样做。 但是,我希望 XML 中包含的 XmlElement 之一保持 XElement。 它不能直接完成(使用 XmlElementAttribute),因为 XElement 不可序列化。 我还尝试将该元素序列化为字符串(分两步尝试获取 XElement),但失败并出现错误: 意外的节点类型元素。 readelementstring 方法只能在具有简单或空内容的元素上调用 知道怎么做吗? 这是我想要的 xml 和结果对象的示例: <Person name="Joe"> <Hobbies> <Hobby name="Reading" .../> <Hobby name="Photography" .../> </Hobbies> <HomeAddress> ... </HomeAddress> </Person> 目的: public class Person { [XmlAttribute("Name")] public string Name {get; set;} ????? public XElement Hobbies {get; set;} [XmlElement("HomeAddress")] public Address HomeAddress {get
  • 包含无效字符的对象的 XML 序列化(XML Serialization of an Object Containing invalid chars)
    问题 我正在序列化一个包含字符串属性中的 HTML 数据的对象。 Dim Formatter As New Xml.Serialization.XmlSerializer(GetType(MyObject)) Dim fs As New FileStream(FilePath, FileMode.Create) Formatter.Serialize(fs, Ob) fs.Close() 但是当我将 XML 读回对象时: Dim Formatter As New Xml.Serialization.XmlSerializer(GetType(MyObject)) Dim fs As New FileStream(FilePath, FileMode.Open) Dim Ob = CType(Formatter.Deserialize(fs), MyObject) fs.Close() 我收到此错误: "'', hexadecimal value 0x14, is an invalid character. Line 395, position 22." .NET 不应该防止这种错误,转义无效字符吗? 这里发生了什么,我该如何解决? 回答1 它应该在序列化步骤中真的失败了,因为 0x14 是 XML 的无效值。 没有办法转义它,即使使用&#x14也不行,因为它被排除为 XML
  • 如何在 C# 中将 XMLDocument 反序列化为对象?(How to Deserialize XMLDocument to object in C#?)
    问题 我有一个接受字符串格式的XML的 .Net webserivce。 发送到 webservice 的XML String 可以代表系统中的任何对象。 我需要检查第一个节点以找出要反序列化 XML 字符串的对象。 为此,我必须将 XML 加载到XMLDocument (不想使用 RegEx 或字符串比较)。 我想知道是否有一种方法可以反序列化XMLDocument/XMLNode而不是反序列化字符串以节省一些性能? 序列化XMLNode而不是字符串会有任何性能优势吗? 加载 XMLDocument 的方法 public void LoadFromString(String s) { m_XmlDoc = new XmlDocument(); m_XmlDoc.LoadXml(s); } 谢谢 回答1 如果您有XmlDocument ,则可以使用XmlNodeReader作为XmlReader传递给XmlSerializer ,但我想知道是否以另一种方式更好; 使用XmlReader得到最外层的元素名称,并把那个给XmlSerializer ... [XmlRoot("foo")] public class Foo { [XmlAttribute("id")] public int Id { get; set; } } static class Program { static
  • XML字符串反序列化为C#对象(XML string deserialization into c# object)
    问题 我收到这样的xml文件。 <radio> <channel id="Opus"> <display-name>Opus</display-name> <icon src="" /> </channel> <channel id="Klasika"> <display-name>Klasika</display-name> <icon src="" /> </channel> <channel id="LR"> <display-name>LR</display-name> <icon src="" /> </channel> <programme channel="Opus" start="20130203060000" stop="20130203110000" duration="050000"> <title lang="lt">OPUS muzika.</title> <desc lang="lt">OPUS muzika.</desc> <category lang="lt">muzikos laidos</category> <date>2013.02.03</date> </programme> <programme channel="Opus" start="20130203110000" stop="20130203150000" duration=
  • 如何以XML反序列化未知类型的对象?(How to XML deserialize an object of Unknown Type?)
    问题 我想使用XmlSerializer将对象保存到硬盘(如缓存)中。 在这种情况下,我没有任何问题。 但是,当我想将此XML反序列化为对象时,会出现错误。 有什么方法可以将XML反序列化为未知对象或我创建的对象? 回答1 .Net中无法将反序列化为未知对象。 要成功地序列化/反序列化XML对象,该类必须具有默认构造函数。 最好的方法是向我们显示确切的错误消息。 你能做到吗? 回答2 为什么不首先序列化您的类的类型(System.Type类是可序列化的)? 然后,您可以检查序列化了哪种类型并创建适当的实例。 回答3 假设C# 这是我的解决方案:只需将字符串保存到文本文件或任何您想命名的文件即可。 用法如下: var xmlString = XmlHelper.Serialize(myObject); var myNewObject = XmlHelper.Deserialize<myObjectType>(xmlString); 这是课程: public static class XmlHelper { /// <summary> /// Gets the XML from an object, used like: var test = this.Serialize(response); for troubleshooting. /// </summary> /// <param
  • VB.NET 使用 newtonsoft 将 JSON 反序列化为匿名对象返回错误(VB.NET Deserialize JSON to anonymous object using newtonsoft returned error)
    问题 我想将从 VB.NET 中的服务调用返回的 JSON 反序列化为匿名类型,但我遇到了错误。 它使用动态类型在 C# 中工作,但我不知道如何在 VB 中做到这一点。 这是我从 Web 服务调用返回的 JSON: {"format":"png","height":564,"width":864} 这是我上面分配给参数文本的 VB 代码 json: Dim testObj = Newtonsoft.Json.JsonConvert.DeserializeObject(text) 但是当我尝试访问 testObj.format 时,抛出了一个带有消息的异常 {"Public member 'format' on type 'JObject' not found."} 我已经添加了Option Strict Off 。 我不想使用对象/类来反序列化 JSON。 如果它在 C# 中将此分配给动态类型将工作正常。 有人可以帮忙吗? 我不是 VB 专家,但我需要在 VB 上运行它。 TIA 回答1 Dim js As New System.Web.Script.Serialization.JavaScriptSerializer Dim testObj = js.Deserialize(source, New Object().GetType()) 然后您可以通过以下方式访问键(属性名称)
  • 将Xml反序列化为对象时发生错误-xmlns =不会出现(Error Deserializing Xml to Object - xmlns='' was not expected)
    问题 我在尝试反序列化某些XML时遇到了真正的麻烦,希望有人可以提供一些帮助。 我已经阅读了很多类似的帖子,但是我无法解决此问题。 我正在尝试反序列化的XML <register-account success="false"> <user-name>xxxxx</user-name> <password>fghgh</password> <email>test@example.com</email> <error> <errorcode>120</errorcode> <errormessage>The password is invalid</errormessage> </error> </register-account> 我正在尝试反序列化的类: [Serializable, XmlRoot(ElementName = "register-account", Namespace = "MyNamespace")] [XmlType("register-account")] public class RegisterAccountResponse { [XmlAttribute("success")] public bool Success { get; set; } /// <summary> /// Gets or sets the Tennant email
  • 将 XML 字符串反序列化为对象错误:xml 文档中存在错误 (1,2)(Deserialize XML string to Object Error : There is an Error in xml document (1,2))
    问题 从 Windows 事件查看器中,我可以获得以下 xml 结构: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="XXXXXXXXXX" Guid="{YYYYYYYY}" /> <EventID>XYZ</EventID> <Version>0</Version> <Level>L</Level> <Task>A</Task> <Opcode>0</Opcode> <Keywords>0x000xyzh</Keywords> <TimeCreated SystemTime="2012-06-28T15:44:04.997837000Z" /> <EventRecordID>153</EventRecordID> <Correlation ActivityID="{DDDDDDDDD}" /> <Execution ProcessID="199999" ThreadID="90990" /> <Channel>Microsoft-Windows-ABCDEFG/Admin</Channel> <Computer>myPC</Computer> <Security UserID="ABCABC" /> </System>
  • 已保存 SQL 服务器列表的 VB.Net My.Settings 自定义类型(VB.Net My.Settings custom type for list of saved SQL servers)
    问题 我正在尝试使用 My.Settings 来保存经过身份验证的服务器及其信息的列表,但我无法弄清楚如何制作我的自定义类型。 我现在有一个名为 SqlServer 的类,它具有以下三个字段: Public ServerName As String Public UserName As String Public Password As String 每次我使用 SQL 身份验证连接到 SQL 服务器时,我都想保存该服务器和登录信息。 这意味着我需要一个自定义类型,它是 My.Settings 中 SqlServer 的集合。 这是我到目前为止的代码: Public Class SQLServerList Inherits List(Of SQLServer) Implements IComparable(Of SQLServer) Public Function CompareTo(ByVal SqlServerInfo As SQLServer) As Integer Implements IComparable(Of MyProjectName.SQLServer).CompareTo ... End Function End Class 我通过继承 List 走在正确的轨道上吗? 我需要什么样的属性/字段才能让这个东西按我想要的方式运行? 谢谢你。 回答1 给定一个集合类
  • 将XML反序列化为使用Symfony2的对象(Deserialize xml to object with Symfony2)
    问题 我通过API收集了xml格式的一些数据,并希望在对象列表中反序列化该数据。 我正在使用Symfony2并找到JMSSerializerBundle,但我真的不知道如何使用它。 我知道Sf2允许将对象序列化/反序列化到数组或从数组反序列化,但是我正在寻找更具体的东西。 例如,对于此类: class Screenshot { /** * @var integer $id */ private $id; /** * @var string $url_screenshot */ private $url_screenshot; public function __construct($id, $url_screenshot) { $this->id = $id; $this->url_screenshot = $url_screenshot; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set url_screenshot * * @param string $urlScreenshot */ public function setUrlScreenshot($urlScreenshot) { $this->url_screenshot =
  • 如何将简单类序列化/反序列化为XML并返回(How to serialize/deserialize simple classes to XML and back)
    问题 有时,我想模拟类的存储数据,而无需设置往返数据库的行程。 例如,假设我有以下课程: public class ShoppingCart { public List<CartItem> Items {get; set;} public int UserID { get; set; } } public class CartItem { public int SkuID { get; set; } public int Quantity { get; set; } public double ExtendedCost { get; set; } } 假设我在内存中构建了ShoppingCart对象,并希望将其“保存”为XML文档。 是否可以通过某种XDocument.CreateFromPOCO(shoppingCart)方法实现? 从另一个方向来看又如何:是否有内置的方法可以从XML文档(如new ShoppingCart(xDoc)创建ShoppingCart对象? 回答1 XmlSerializer是执行此操作的一种方法。 DataContractSerializer是另一个。 XmlSerializer示例: using System.Xml; using System.Xml.Serialization; //... ShoppingCart shoppingCart
  • 将对象序列化为XML(Serialize an object to XML)
    问题 我有一个继承的C#类。 我已经成功地“建立”了对象。 但是我需要将该对象序列化为XML。 有一个简单的方法吗? 看起来该类已设置为进行序列化,但是我不确定如何获取XML表示形式。 我的班级定义看起来像这样: [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)] public partial class MyObject { ... } 这是我以为可以做的,但是不起作用: MyObject
  • 如何序列化/反序列化为字典 `来自自定义XML而不使用XElement?(How to serialize/deserialize to `Dictionary<int, string>` from custom XML not using XElement?)
    问题 空的Dictionary<int, string>如何用XML中的键和值填充它 <items> <item id='int_goes_here' value='string_goes_here'/> </items> 并使用XElement将其序列化回XML? 回答1 在临时item类的帮助下 public class item { [XmlAttribute] public int id; [XmlAttribute] public string value; } 样本字典: Dictionary<int, string> dict = new Dictionary<int, string>() { {1,"one"}, {2,"two"} }; 。 XmlSerializer serializer = new XmlSerializer(typeof(item[]), new XmlRootAttribute() { ElementName = "items" }); 序列化 serializer.Serialize(stream, dict.Select(kv=>new item(){id = kv.Key,value=kv.Value}).ToArray() ); 反序列化 var orgDict = ((item[])serializer.Deserialize
  • 使用字典将 xml 反序列化为对象(Deserializing xml to object with dictionary)
    问题 这是我的类结构: class DataItem { public string Id { get; set; } public string Type { get; set; } private Dictionary<string, DataProperty> properties = new Dictionary<string, DataProperty>(); public Dictionary<string, DataProperty> Properties { get { return properties; } set { properties = value; } } } public class DataProperty { public string Key { get; set; } public string Value { get; set; } public bool Required { get; set; } } 这是我想使用的 XML(注意:如果需要,我可以更改 xml ): <Data> <DataItem> <id>ph15</id> <type>core</type> <properties> <DataProperty> <key>size</key> <value>50%</value> <required>false<
  • 使用 JsonConvert 将 JSON 反序列化为 VB.NET 中的数据表(Deserialize JSON into data table in VB.NET using JsonConvert)
    问题 我正在使用 VB.NET 中的以下语句将 JSON 反序列化为数据表。 Dim _dt As DataTable = JsonConvert.DeserializeObject(Of DataTable)(myRecords) myRecords 是一个 JSON 字符串。 它工作正常,但 myRecords 有一些数字属性,如 {"PhoneNo":"123456789", "ID":"46541"} 并且在反序列化后,这些属性被转换为数据类型为字符串的列。 如何将它们反序列化为一个数字? myRecords 正在动态填充,因此我无法进行硬编码。 回答1 Json.NET 为"PhoneNo" : "123456789"创建一个字符串类型的列"PhoneNo" : "123456789"是"123456789"实际上是根据 JSON 标准的字符串文字。 数字文字看起来像这样,值周围没有双引号: 123456789 。 您确定这些属性将始终是数字字符串吗? 并非所有电话号码都是数字,例如,因此对它们进行硬编码似乎是不明智的。 话虽如此,如果您确定这些属性始终是数字字符串,并希望 Json.NET 为它们创建数字DataTable列,则需要提前告诉它这些列所需的类型。 一种选择是从适当的架构创建类型化数据表。 在这种情况下, JsonConvert
  • 如何在文件中保存/恢复可序列化对象?(How to save/restore serializable object to/from file?)
    问题 我有一个对象列表,需要将其保存在计算机中的某个位置。 我已经阅读了一些论坛,并且我知道该对象必须是Serializable 。 但是,如果我能举个例子,那就太好了。 例如,如果我有以下内容: [Serializable] public class SomeClass { public string someProperty { get; set; } } SomeClass object1 = new SomeClass { someProperty = "someString" }; 但是,如何将object1存储在计算机中的某个地方,以后再取回呢? 回答1 您可以使用以下内容: /// <summary> /// Serializes an object. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="serializableObject"></param> /// <param name="fileName"></param> public void SerializeObject<T>(T serializableObject, string fileName) { if (serializableObject == null) { return; } try {
  • 反序列化 JSON 不适用于 JSON.NET(Deserialize JSON not working with JSON.NET)
    问题 使用 JSON.NET 反序列化时,我遇到以下 JSON 问题。 { "?xml": { "@version": "1.0", "@encoding": "utf-8" }, "Persons": { "Person": [{ "@Id": "1", "@Name": "John", "@Surname": "Smith" }, { "@Id": "2", "@Name": "John", "@Surname": "Smith", "Skills": { "Skill": [{ "@Id": "1", "@Name": "Developer" }, { "@Id": "2", "@Name": "Tester" }] } }] } } 我正在使用以下课程: public class RootObject { public Xml xml { get; set; } public Persons Persons { get; set; } } public class Xml { public string version { get; set; } public string encoding { get; set; } } public class Persons { public List<Person> Person { get; set; } } public
  • C# 将 XML 反序列化为对象(C# Deserialize XML to object)
    问题 在 C# 中将某些 xml 反序列化为对象时遇到问题。 我收到的错误是... xmlns=''> was not expected. 我收到的用于生成我的类的 XSD 如下... <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="xml.AAAAAAA.com/commerce/apres-vente_technique/assistance" xmlns:pgp="xml.AAAAAAA.com/commerce/apres-vente_technique/assistance" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="ListeAvisRemboursements"> <xs:annotation> <xs:documentation>Liste des avis de remboursements</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence maxOccurs="unbounded">
  • 如何将多个对象序列化到现有的 XmlDocument 中,而每个组件上都没有命名空间?(How to serialize multiple objects into an existing XmlDocument, without having the namespaces on each component?)
    问题 如何将多个对象序列化为 .Net/C# 中的现有 XmlDocument? 我有一个 XmlDocument,它已经包含数据。 我有多个对象。 现在我想将它们一一序列化并将它们添加到 XmlDocument (AppendChild) 中。 应该是这样: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <project> <mySettings>...</mySettings> <component_1> anydata </component_1> ... <component_x> anydata </component_x> </project> 当我使用 XmlSerializer 时,我得到了每个组件的定义: <component_1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> anydata </component_1> 所以这就是我得到的,当我序列化为一个字符串然后从字符串创建一个 XmlNode 时,我将其附加到我的文档中: <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  • 无法序列化会话状态... [更新!](Unable to serialize the session state… [Updated!])
    问题 我正在尝试在会话中存储一些对象(使用 StateServer),但出现错误“System.Web.HttpException:无法序列化会话状态。在‘StateServer’和‘SQLServer’模式下” 我知道错误消息的含义,但我不知道为什么。 我使用的所有类都标记为可序列化,并且我能够使用以下方法将对象序列化和反序列化到 XML 和从 XML 反序列化: System.IO.StringReader stringReader = new System.IO.StringReader(xml); System.Xml.XmlTextReader xmlTextReader = new System.Xml.XmlTextReader(stringReader); System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(Parts)); Parts obj = ((Parts)(xmlSerializer.Deserialize(xmlTextReader))); 这有效,并且也将使用以下方法进行序列化: System.Xml.Serialization.XmlSerializer xmlSerializer = new