XML反序列化是从其序列化状态重新创建内存中对象的过程,该状态使用XML作为数据格式。
我正在尝试使用 Rust 中的 Serde 和 Quick-XML 反序列化 MathML。由于 MathML 的递归性质,我在尝试编写结构时遇到了麻烦。这是一个最小的、可重现的示例:...
ASP.NET Core - 反序列化城市 API XML 响应不起作用
调用城市 API 时,它以 XML 格式返回此响应。我想将此 XML 反序列化为一个对象。反序列化抓取对象,直到 diffgram 内部 diffgram 我们有 NewDataSet pr...
城市 API XML 响应 XmlDeserialization 不起作用,ASP.NET Core
调用城市 API 时,它会以 XML 格式返回此响应。我想将此 XML 反序列化为 C# 对象。反序列化抓取对象直到 diffgram 在 diffgram 中我们有 NewDataSet 属性
之前,序列化/反序列化方法使用Item类型: 公共类项目{} 现在我有一个名为 ItemWrapper 的新类,该类派生自 Item,并具有附加属性: 公开课
使用 XPath 而不是 C# 中属性的固定元素名称进行 XML 反序列化?
如果我有这样的xml 123 我可以轻松地将其反序列化为此类结构 [XmlRoot(&q...
我正在调用一个 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; }
我有一个如下所示的json { “标题”:空, “项目名”: { "@Label": "项目名称", “价值”: ””, “@
给定以下 XML,我如何将它们反序列化为同一个 C# 对象?版本 1.1 本质上向后兼容 1.0,所以我并不真正关心 xmlns 值,但 C# 不这么认为...
在 C# 中使用混合元素顺序反序列化/序列化 XML 时出现问题
我在将 XML 反序列化/序列化为 C# 对象时遇到问题。 XML 结构具有混合的元素顺序,我遇到了具有相同名称但
是否可以在不使用 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. 
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. 
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()) }; }
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; } }
xxx 或者 xxx 或者 xxx xxx 如果两者都存在,我需要使用
在 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>
我正在尝试序列化控件的所有属性,对于初学者,我从 Devexpress 的 TextEdit 控件开始。但是,TextBox 控件也会出现同样的问题。连载已通过...
我想将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# 对象。
我正在使用 xsdata 中的 XmlSerializer 将 python3.9 数据类对象转换为 XML。 这是代码 # 创建序列化器 XML_SERIALIZER = XmlSerializer(config=SerializerConfig(xml_declaration=
解决WCF DataContract DataMember Order反序列化问题
与遗留 WCF 接口的一个用例是将所有 .NET 服务代码隐藏在更现代的 RESTful API 后面,我们将(看似正确的)XML 发布到该 API,并将其反序列化为 WCF 类...
XElement Xml = null; var apiResponse = response.Content.ReadAsStringAsync().Result; Xml = Newtonsoft.Json.JsonConvert.DeserializeObject(apiResponse); 来自上述公司的 XML 响应...
我在 C# 中有这个类: [XmlRoot("响应")] 公开课回应 { [XmlElement(ElementName = "文档")] 公共文档文档{获取;放; } [Xml元素(