xml-deserialization 相关问题

XML反序列化是从其序列化状态重新创建内存中对象的过程,该状态使用XML作为数据格式。


在 Rust 中使用 Serde 反序列化递归 XML

我正在尝试使用 Rust 中的 Serde 和 Quick-XML 反序列化 MathML。由于 MathML 的递归性质,我在尝试编写结构时遇到了麻烦。这是一个最小的、可重现的示例:...

回答 2 投票 0

ASP.NET Core - 反序列化城市 API XML 响应不起作用

调用城市 API 时,它以 XML 格式返回此响应。我想将此 XML 反序列化为一个对象。反序列化抓取对象,直到 diffgram 内部 diffgram 我们有 NewDataSet pr...

回答 1 投票 0

城市 API XML 响应 XmlDeserialization 不起作用,ASP.NET Core

调用城市 API 时,它会以 XML 格式返回此响应。我想将此 XML 反序列化为 C# 对象。反序列化抓取对象直到 diffgram 在 diffgram 中我们有 NewDataSet 属性

回答 1 投票 0

C# XML 序列化向后兼容性

之前,序列化/反序列化方法使用Item类型: 公共类项目{} 现在我有一个名为 ItemWrapper 的新类,该类派生自 Item,并具有附加属性: 公开课

回答 2 投票 0

使用 XPath 而不是 C# 中属性的固定元素名称进行 XML 反序列化?

如果我有这样的xml 123 我可以轻松地将其反序列化为此类结构 [XmlRoot(&q...

回答 1 投票 0

RestSharp 反序列化父节点内的 XML 节点

我正在调用一个 API 服务,该服务包装由 Response 元素包围的所有响应: 我正在调用一个 API 服务,该服务包含由 Response 元素包围的所有响应: <?xml version="1.0" encoding="UTF-8"?> <Response xmlns="http://www.example.com/stuff"> <status upstairs="Normal" downstairs="Normal"/> </Response> 我的状态类别是: class status { public string upstairs { get; set; } public string downstairs { get; set; } } 我正在调用 RestSharp 来获取状态(在 V106 之前,此方法有效): var client = new RestClient("http://www.example.com"); var request = new RestRequest("/api?get=status", Method.Get); var response = client.Execute<status>(request); if (response.Status.Equals(OK)) { var status = response.Data; } 使用当前版本的 RestSharp,我在响应中看到数据存在,但是解串器因错误而失败 "<Response xmlns="http://www.example.com/stuff"> was not expected." 如何指定存在父元素,但忽略它? 通过更改我的模型以包含外部元素来使其工作,如下所示: [XmlRoot("Response", Namespace="http://www.example.com/stuff")] public class ResponseStatus { [XmlElement] public status status { get; set; } } public class status { [XmlAttribute] public string upstairs { get; set; } [XmlAttribute] public string downstairs { get; set; } } 代码现在看起来像这样: var client = new RestClient("http://www.example.com"); var request = new RestRequest("/api?get=status", Method.Get); var response = client.Execute<ResponseStatus>(request); if (response.Status.Equals(OK)) { var status = response.Data.status; }

回答 1 投票 0

C# 使用属性和值将 JSON 转换为 XML

我有一个如下所示的json { “标题”:空, “项目名”: { "@Label": "项目名称", “价值”: ””, “@

回答 1 投票 0

如何将 XML 反序列化为 C# 对象而忽略 xmlns?

给定以下 XML,我如何将它们反序列化为同一个 C# 对象?版本 1.1 本质上向后兼容 1.0,所以我并不真正关心 xmlns 值,但 C# 不这么认为...

回答 1 投票 0

在 C# 中使用混合元素顺序反序列化/序列化 XML 时出现问题

我在将 XML 反序列化/序列化为 C# 对象时遇到问题。 XML 结构具有混合的元素顺序,我遇到了具有相同名称但

回答 1 投票 0

是否可以在不使用 linq-to-xml 的情况下将 xml 反序列化为字典?

我想反序列化 xml 文件。这是有问题的 xml 文件: 我想反序列化 xml 文件。这是有问题的 xml 文件: <MessageList category="Alarm" version="1.0.0"> <Item id="1"> <Message key="Level" text="Alarm" /> <Message key="Title" text="ERROR AT PLC UNIT" /> <Message key="Detail" text="Change PLC unit. &#xD;&#xA;If it is out of order. please contact our service man." /> </Item> <Item id="2"> <Message key="Level" text="Alarm" /> <Message key="Title" text="RE-SET PLC UNIT ( PROGRAM FS )" /> <Message key="Detail" text="Turn off and restart. if the problem persists. check thet the switch on the controller is in RUN mode. &#xD;&#xA;If it is out of order. please contact our service man." /> </Item> <Item id="3"> <Message key="Level" text="Alarm" /> <Message key="Title" text="" /> <Message key="Detail" text="" /> </Item> <Item id="4"> <Message key="Level" text="Alarm" /> <Message key="Title" text="" /> <Message key="Detail" text="" /> </Item> <Item id="5"> <Message key="Level" text="Alarm" /> <Message key="Title" text="" /> <Message key="Detail" text="" /> </Item> 是否可以在不使用 linq-to-xml 的情况下将 xml 反序列化为字典? 你好,我想反序列化一个 xml 文件。这是有问题的 xml 文件 我想获得如下所示的两个课程。链接到 MessageList 的类,其中包含所有其他 Items 元素。 您可能已经注意到,所有项目都有一个代表它们的唯一 ID。所以我想将它用作字典键并将消息元素包含在列表中作为字典值。 class MessageListClass { public string category { get; set; } public string version { get; set; } public List< Dictionary<int, List<Message> > > items { get; set; } } public class Message { public string key { get; set; } public string text { get; set; } } 目前,我已经使用 System.Xml.Serialization 中的属性以这种方式完成了。它运作良好,但它们不是字典。有没有办法使用 System.Xml.Serialization 属性而不是 Linq-to-Xml 来获取像我想要的字典? [XmlRoot("MessageList")] class MessageList { [XmlAttribute("category")] public string category { get; set; } [XmlAttribute("version")] public string version { get; set; } [XmlElement("Item")] public List<Item> items { get; set; } } public class Item { [XmlAttribute("id")] public int alarmId { get; set; } [XmlElement("Message")] public List<Message> messages { get; set; } } public class Message { [XmlAttribute("key")] public string key { get; set; } [XmlAttribute("text")] public string text { get; set; } } 我建议为序列化和其他用途保留单独的模型。这对于模型不完全匹配的情况很有帮助。专用于序列化的类有时称为“数据传输对象”或“DTO”。 您可以添加一种方法以从一种模型转换为另一种模型: class MessageListDTO { [XmlAttribute("category")] public string Category { get; set; } [XmlAttribute("version")] public string Version { get; set; } [XmlElement("Item")] public List<ItemDTO> Items { get; set; } public MessageList ToModel(){ return new MessageList(){ Category = Category, Version = Version, Items = Items.ToDictionary( i => i.AlarmId , i => i.Messages.Select(m => m.ToModel()).ToList()) }; }

回答 1 投票 0

XML 反序列化:如果存在两个元素,我如何才能优先于另一个元素绑定到一个元素?

我需要反序列化包含以下三种形式之一的元素的 XML: xxx 或者 xxx 或者 xxx 我需要反序列化包含以下三种形式之一的元素的 XML: <Element1>xxx</Element1> 或 <Element2>xxx</Element2> 或 <Element1>xxx</Element1> <Element2>xxx</Element2> 如果两者都存在,我需要优先使用 Element1 的值而不是 Element2。我怎样才能做到这一点? 我正在使用 System.Xml.Serialization 来解析 xml 这是我的财产 [XmlElement("Element1")] [XmlElement("Element2")] public string Data { get { return this.data; } set { this.data = value; } } 就我而言,如果两者都存在,我需要使用 Element1,否则使用存在的那个。 我无法想出解决方案。 试试这个。 public class Parent : IXmlSerializable { public string data { get; set; } public void WriteXml(XmlWriter writer) { writer.WriteString(data); } public void ReadXml(XmlReader reader) { XElement node = (XElement)XElement.ReadFrom(reader); XElement element1 = node.Element("Element1"); XElement element2 = node.Element("Element2"); if(element1 == null) { data = (string)element2; } else { data = (string)element1; } } public XmlSchema GetSchema() { return (null); } } 有很多方法可以解决您的问题。 其中之一是使用 UnknownElement 事件。 using System.Xml.Serialization; var ser = new XmlSerializer(typeof(Root)); ser.UnknownElement += Serializer_UnknownElement; void Serializer_UnknownElement(object? sender, XmlElementEventArgs e) { var root = (Root)e.ObjectBeingDeserialized; var elem = e.Element; if (elem.Name == "Element1") root.Data = elem.InnerText; else if (elem.Name == "Element2" && root.Data == null) root.Data = elem.InnerText; } using var fs = new FileStream("test.xml", FileMode.Open); var root = (Root)ser.Deserialize(fs); Console.WriteLine(root.Data); public class Root { public string Data { get; set; } } 另一种方法是使用自定义读取器来动态替换数据。 using System.Xml; using System.Xml.Serialization; var ser = new XmlSerializer(typeof(Root)); using var reader = new CustomXmlReader("test.xml"); var root = (Root)ser.Deserialize(reader); Console.WriteLine(root.Data); public class CustomXmlReader : XmlTextReader { public CustomXmlReader(string url) : base(url) { } private bool dataRead; public override string LocalName { get { if (base.LocalName == "Element1") { dataRead = true; return "Data"; } else if (base.LocalName == "Element2" && !dataRead) return "Data"; return base.LocalName; } } } public class Root { public string Data { get; set; } }

回答 2 投票 0

Xml反序列化c#,如果存在两个元素需要使用特定元素

xxx 或者 xxx 或者 xxx xxx 如果两者都存在,我需要使用

回答 1 投票 0

在 C# 中反序列化时出现 InvalidOperationException

我正在使用基于 XML 的 .config 文件来存储一些记录。我的 XML 如下: 我正在使用基于 XML 的 .config 文件来存储一些记录。我的 XML 如下: <?xml version="1.0" encoding="utf-8"?> <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Configuration> <Name>1st Week</Name> <Binary> <Field>field1</Field> <Version>1.0</Version> </Binary> <Binary> <Field>field2</Field> <Version>2.0</Version> </Binary> </Configuration> <Configuration> <Name>2nd Week</Name> <Binary> <Field>field1</Field> <Version>2.0</Version> </Binary> <Binary> <Field>field2</Field> <Version>4.0</Version> </Binary> </Configuration> </Data_List> 我使用 C# 代码如下: public Binary { public String Field; public String Version; } public Configuration { public String Name; public List<Binary> Binary_List = new List<Binary>(); public GetfromXML() { List<Configuration> lists = new List<Configuration>(); TextReader reader = new StreamReader("Data_List.config"); XmlSerializer serializer = new XmlSerializer(typeof(List<Configuration>)); lists=(List<Configuration>)serializer.Deserialize(reader); reader.Close(); } 我收到异常消息“XML 文档(2,2) 中存在错误”。我该如何解决它? 我认为问题在于你的模型结构不佳。换句话说,序列化程序不知道如何读取您的 .xml。 您的 xml 错误。当你有 List< T > 时,会有一个: <ArrayOfT></ArrayOfT> 在 .XML 中。这是你需要做的! 首先,尝试使用 System.Xml.Serialization 中的 xml 属性(即 [XmlArray()]) 最好使用 FileStream 而不是仅仅指出 URI using(var filestream = new FileStream(//your uri, FIleMode.Open) { } 使用属性而不是变量。因为稍后您可能想要绑定。 我如何设法解决该问题的代码示例: public ServiceMap Deserialize() { ServiceMap serviceMap = new ServiceMap(); try { using (var fileStream = new FileStream(Settings.ServiceMapPath, FileMode.Open)) { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; using (XmlReader reader = XmlReader.Create(fileStream, settings)) { serviceMap = _serializer.Deserialize(reader) as ServiceMap; } } } catch (FileNotFoundException) { MessageBox.Show("File 'ServiceMap.xml' could not be found!"); } return serviceMap; } 我的 ServiceMap 类: [XmlRoot("ServiceMap")] public class ServiceMap { [XmlArray("Nodes")] [XmlArrayItem("Node")] public List<Node> Nodes = new List<Node>(); [XmlArray("Groups")] [XmlArrayItem("Group")] public List<Group> Groups = new List<Group>(); [XmlArray("Categories")] [XmlArrayItem("Category")] public List<Category> Categories = new List<Category>(); } 编辑:我的XML: <?xml version="1.0" encoding="utf-8"?> <ServiceMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// www.w3.org/2001/XMLSchema"> <Nodes> <Node Name="Predrag"> <Children> <Child>dijete1</Child> <Child>dijete2</Child> <Child>dijete3</Child> <Child>dijete4</Child> </Children> <Parents> <Parent>roditelj1</Parent> <Parent>roditelj2</Parent> <Parent>roditelj3</Parent> </Parents> <Group Name="Grupa" /> <Category Name="Kategorija" /> </Node> <Node Name="Tami"> <Children> <Child>dijete1</Child> <Child>dijete2</Child> </Children> <Parents> <Parent>roditelj1</Parent> </Parents> <Group Name="Grupa2" /> <Category Name="Kategorija2" /> </Node>

回答 1 投票 0

具有所有属性的控件的(反)序列化

我正在尝试序列化控件的所有属性,对于初学者,我从 Devexpress 的 TextEdit 控件开始。但是,TextBox 控件也会出现同样的问题。连载已通过...

回答 1 投票 0

使用本机 AOT 进行 Xml 反序列化

我想将xml文档反序列化为c#对象。 Xml文档示例 我想将 xml 文档反序列化为 c# 对象。 Xml文档示例 <XtraSerializer version="1.0" application="LayoutControl"> <property name="#LayoutVersion" /> <property name="OptionsFocus" isnull="true" iskey="true"> <property name="ActivateSelectedControlOnGotFocus">true</property> <property name="AllowFocusControlOnLabelClick">false</property> <property name="EnableAutoTabOrder">true</property> <property name="AllowFocusControlOnActivatedTabPage">false</property> <property name="AllowFocusGroups">true</property> <property name="AllowFocusTabbedGroups">true</property> <property name="AllowFocusReadonlyEditors">true</property> <property name="MoveFocusRightToLeft">false</property> <property name="MoveFocusDirection">AcrossThenDown</property> </property> <property name="Items" iskey="true" value="2"> <property name="Item1" isnull="true" iskey="true"> <property name="TypeName">LayoutGroup</property> <property name="TabbedGroupParentName" /> <property name="GroupBordersVisible">false</property> <property name="AllowDrawBackground">true</property> <property name="EnableIndentsWithoutBorders">True</property> <property name="OptionsItemText" isnull="true" iskey="true"> <property name="TextToControlDistance">4</property> <property name="TextAlignMode">UseParentOptions</property> </property> <property name="CaptionImageVisible">true</property> <property name="FlowDirection">LeftToRight</property> <property name="LayoutMode">Regular</property> <property name="CaptionImageLocation">Default</property> <property name="CaptionImageIndex">-1</property> <property name="AllowBorderColorBlending">false</property> <property name="ExpandOnDoubleClick">false</property> <property name="Expanded">true</property> <property name="DefaultLayoutType">Vertical</property> <property name="ShowTabPageCloseButton">false</property> <property name="AllowHtmlStringInCaption">false</property> <property name="AllowGlyphSkinning">Default</property> <property name="OptionsTableLayoutGroup" isnull="true" iskey="true"> <property name="RowDefinitions" iskey="true" value="0" /> <property name="ColumnDefinitions" iskey="true" value="0" /> </property> <property name="Size">@4,Width=1318@3,Height=554</property> <property name="ExpandButtonVisible">false</property> <property name="ExpandButtonMode">Normal</property> <property name="HeaderButtonsLocation">Default</property> <property name="GroupStyle">Inherited</property> <property name="TextLocation">Top</property> <property name="TabPageWidth">0</property> <property name="OptionsCustomization" isnull="true" iskey="true"> <property name="AllowDrag">Default</property> <property name="AllowDrop">Default</property> </property> <property name="OptionsTableLayoutItem" isnull="true" iskey="true"> <property name="RowIndex">0</property> <property name="RowSpan">1</property> <property name="ColumnIndex">0</property> <property name="ColumnSpan">1</property> </property> <property name="OptionsToolTip" isnull="true" iskey="true"> <property name="ToolTip" /> <property name="ToolTipTitle" /> <property name="ToolTipIconType">None</property> <property name="ImmediateToolTip">false</property> <property name="AllowHtmlString">Default</property> <property name="IconToolTip" /> <property name="IconToolTipTitle" /> <property name="IconToolTipIconType">None</property> <property name="EnableIconToolTip">true</property> <property name="IconImmediateToolTip">false</property> <property name="IconAllowHtmlString">Default</property> </property> <property name="Name">Root</property> <property name="ParentName" /> <property name="TextVisible">false</property> <property name="Location">@1,X=0@1,Y=0</property> <property name="ShowInCustomizationForm">true</property> <property name="Text">Root</property> <property name="CustomizationFormText">Root</property> <property name="StartNewLine">false</property> <property name="Visibility">Always</property> </property> </property> </XtraSerializer> 现在我想从 xml 字符串反序列化为 c# 对象。 [XmlRoot(ElementName = "property")] public class Property { [XmlAttribute(AttributeName = "name")] public string Name { get; set; } [XmlText] public string Text { get; set; } [XmlElement(ElementName = "property")] public List<Property> property { get; set; } } [XmlRoot(ElementName = "XtraSerializer")] public class XtraSerializer { [XmlElement(ElementName = "property")] public List<Property> Property { get; set; } [XmlText] public string Text { get; set; } } XtraSerializer GetXtraSerializer(string xml) { XmlSerializer serializer = new XmlSerializer(typeof(XtraSerializer)); using StringReader reader = new (xml); return (XtraSerializer)serializer.Deserialize(reader); } 发布前运行正常。使用本机 AOT 发布后会发生异常。 XML 文档 (0, 0) 中有错误。 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,字符串编码样式,XmlDeserializationEvents 事件) 以下代码有效。我所做的就是更改 StringReader : using System; using System.Collections.Generic; using System.Linq; using System.Xml; using System.Xml.Serialization; using System.IO; namespace ConsoleApp10 { class Program { const string FILENAME = @"c:\temp\test.xml"; static void Main(string[] args) { string xml = File.ReadAllText(FILENAME); XtraSerializer xtra = GetXtraSerializer(xml); } static XtraSerializer GetXtraSerializer(string xml) { XmlSerializer serializer = new XmlSerializer(typeof(XtraSerializer)); StringReader reader = new StringReader(xml); return (XtraSerializer)serializer.Deserialize(reader); } } [XmlRoot(ElementName = "property")] public class Property { [XmlAttribute(AttributeName = "name")] public string Name { get; set; } [XmlText] public string Text { get; set; } [XmlElement(ElementName = "property")] public List<Property> property { get; set; } } [XmlRoot(ElementName = "XtraSerializer")] public class XtraSerializer { [XmlElement(ElementName = "property")] public List<Property> Property { get; set; } [XmlText] public string Text { get; set; } } } 我为此使用了Newtonsoft。首先我转换为 json,然后转换为 c# 对象。

回答 2 投票 0

将 Python 对象转换为不带命名空间的 XML

我正在使用 xsdata 中的 XmlSerializer 将 python3.9 数据类对象转换为 XML。 这是代码 # 创建序列化器 XML_SERIALIZER = XmlSerializer(config=SerializerConfig(xml_declaration=

回答 1 投票 0

解决WCF DataContract DataMember Order反序列化问题

与遗留 WCF 接口的一个用例是将所有 .NET 服务代码隐藏在更现代的 RESTful API 后面,我们将(看似正确的)XML 发布到该 API,并将其反序列化为 WCF 类...

回答 1 投票 0

从 XML 响应转换为列表

XElement Xml = null; var apiResponse = response.Content.ReadAsStringAsync().Result; Xml = Newtonsoft.Json.JsonConvert.DeserializeObject(apiResponse); 来自上述公司的 XML 响应...

回答 2 投票 0

C# XmlSerializer 不会反序列化所有类属性

我在 C# 中有这个类: [XmlRoot("响应")] 公开课回应 { [XmlElement(ElementName = "文档")] 公共文档文档{获取;放; } [Xml元素(

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.