xmlserializer 相关问题

将对象序列化和反序列化到XML文档中和从XML文档中反序列化。 XmlSerializer使您可以控制对象如何编码为XML。

为什么反序列化子类时会引发 XmlSerializer.UnknownAttribute/UnknownNode 事件?

当使用子类时,我在反序列化由 XmlSerializer 生成的 XML 代码时遇到了问题。 UnknownAttribute 和 UnknownNode 事件触发,我认为存在错误

回答 1 投票 0

是否可以将 C# 模型转换为 xml 并将其上传到 FTP 服务器而无需本地临时文件?

我打算使用 xmlserializer 和 FluntFTP 库来做到这一点,但我懒得创建任何本地临时 xml 文件。

回答 1 投票 0

有没有一种好方法来处理在 C# 中可以具有带有变量名称的嵌套节点的文件的 XML 反序列化?

我正在用 C# 开发一个用于 XML 文件类型的反序列化器,该程序的程序我无法控制。不幸的是,XML 文件结构在两个主要方面完全打破了约定,到目前为止......

回答 1 投票 0

使用 XDocument 创建 XML,或使用 xsd.exe 和 XmlSerializer 从 XSD 架构创建 XML?

当您可以使用 XDocument 时,为什么要使用 xsd.exe 工具为 XSD 模式创建类,然后使用序列化器创建 XML 文件。 我是否应该始终使用 XDocument 并通过

回答 1 投票 0

XML 序列化程序删除 XML 定义

C#中List对象序列化为xml时如何去掉XML定义()?

回答 1 投票 0

WCF MessageContract 未绑定到类 - MessageContract 在端点中为 Null

我正在尝试在 WCF 中接收请求。 我需要用 MessageContract 进行响应,因此我需要将 MessageContract 作为输入。 我无法更改输入 SOAP 请求,并且必须将其接受为...

回答 1 投票 0

如何反序列化具有不同元素名称的XML?

我想将许多 xml 反序列化为 C# 对象,但 xml 的同一元素具有不同的名称。 私有 FileAsXML GetDataObject(字符串 xml) { FileAsXML 数据 = new FileAsXML();

回答 1 投票 0

在 C# 中反序列化 XML 时出错

这是我的 C# 反序列化代码: 私人无效button1_Click(对象发送者,EventArgs e) { LandXML myObject; XmlSerializer mySerializer = 新的 XmlSerializer(典型...

回答 2 投票 0

java.lang.Long 无法转换为 java.util.Map 但我不会转换任何 long

私有静态Serializer序列化器; 私有静态 Map 用户 = new HashMap<>(); // 私有静态 Map admins = new HashMap<>(); 私人静态地图...

回答 1 投票 0

如何使用 XmlSerializer 反序列化字符串数组?

我正在尝试对我的 XML 文件使用 XmlSerializer.Deserialize() 。这是代码: 私有无效LoadSceneDialogues() { if (dialogXML != null) { 场景对话 = 新词典 我正在尝试对我的 XML 文件使用 XmlSerializer.Deserialize()。这是代码: private void LoadSceneDialogues() { if (dialogueXML != null) { sceneDialogues = new Dictionary<int, Dialogue>(); XmlSerializer serializer = new XmlSerializer(typeof(List<Dialogue>), new XmlRootAttribute("Dialogues")); using (var reader = new StringReader(dialogueXML.text)) { try { Debug.Log("Purely for Debugging1"); var loadedData = (List<Dialogue>)serializer.Deserialize(reader); foreach (var data in loadedData) { Debug.Log($"oID: {data.oID} name: {data.characterName}"); foreach (var sentence in data.sentences) { Debug.Log($"sentence: {sentence}"); } Debug.Log($"sentences count: {data.sentences.Length}"); //Debug.Log($"sentences: {data.sentences}"); sceneDialogues.Add(data.oID, data); } if (sceneDialogues != null) { Debug.Log("Purely for Debugging2"); } } catch (InvalidOperationException ex) { Debug.LogError($"Error deserializing XML: {ex.Message}"); Debug.Log($"Loaded XML data:\n{dialogueXML.text}"); } } } else { Debug.LogError("Dialogue XML file not assigned in DialogueManager!"); } } 这是对话课: using UnityEngine; [CreateAssetMenu(fileName = "NewDialogue", menuName = "Dialogue")] public class Dialogue : ScriptableObject { public string characterName; // 캐릭터 이름 [TextArea(3, 20)] public string[] sentences; // 대화 내용 public int oID = -1; public int nextoID = -1; public int animID = -1; } 这是我正在使用的 XML 的一部分: <?xml version="1.0" encoding="UTF-8"?> <Dialogues> <Dialogue> <oID>0</oID> <nextoID>-1</nextoID> <animID>0</animID> <characterName>a</characterName> <sentences> <sentence>god...</sentence> <sentence>wtf?</sentence> </sentences> </Dialogue> </Dialogues> 除了句子之外,其他工作正常。 我从这个对话对象得到的数组是空的,而其他像“oid”的数组是他们应该的。 我认为这是因为“句子”是嵌套的,但我不知道如何正确处理这个问题。 做了一些日志,发现dialog.sentences是空的,而其他的则不是。 我想修改当前代码,以便它正确处理句子。 将对话句子属性更新为元素名称为“sentence”的 XMLArrayItem: public class Dialogue : ScriptableObject { public string characterName; // 캐릭터 이름 [XmlArrayItem(ElementName="sentence")] public List<string> Sentences{ get; set; } public int oID = -1; public int nextoID = -1; public int animID = -1; }

回答 1 投票 0

ASP.NET Core中是否可以为单个控制器启用XmlSerialization

我有一个 Web API,它有多个控制器,其中一个由于遗留原因返回 XML,而其他所有控制器都返回 JSON。 在 .NET Framework 中,我可以有选择地启用 XML 序列化...

回答 4 投票 0

C# XmlSerializer - 输出控制新行的多个 xml 片段

我希望能够编写没有命名空间、没有 XML 前导码等的 xml 片段。 XmlSerializer.Serialize() 在序列化为通用输出流时会产生缩进输出,但它使用 &qu...

回答 1 投票 0

Symfony Serializer xml,按顺序包含复杂的 xsd 类型

我收到以下 XSD: 我收到以下 XSD: <xsd:complexType name="typeADDRESS"> <xsd:sequence> <xsd:element ref="NAME" minOccurs="0" maxOccurs="unbounded"/> <!-- # ... just to show that these aren't the only ones --> <xsd:sequence minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="EMAIL"/> <xsd:element ref="PUBLIC_KEY" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <!-- # ... and also some attributes later --> </xsd:sequence> </xsd:complexType> 如果电子邮件元素的 XML 数据如下所示: <EMAIL>A</EMAIL> <PUBLIC_KEY>A1</PUBLIC_KEY> <PUBLIC_KEY>A2</PUBLIC_KEY> <EMAIL>B</EMAIL> <PUBLIC_KEY>B1</PUBLIC_KEY> <PUBLIC_KEY>B2</PUBLIC_KEY> 如何将其放入有意义的 PHP 结构中? 当正常化回来时,我如何保持订单? 我需要使用NormalizedInterface、DenormalizedInterface吗? 其他属性又如何,我是否也需要手动(去)规范化它们? 在大多数 API 中处理此类结构是很棘手的。我首先使用 XSLT 将数据转换为更规则的结构: <xsl:for-each-group select="*" group-starting-with="EMAIL"> <ENTRY email="{EMAIL}"> <xsl:copy-of select="PUBLIC_KEY"/> </ENTRY> </xsl:for-each-group> 这会将其变成: <ENTRY email="A"> <PUBLIC_KEY>A1</PUBLIC_KEY> <PUBLIC_KEY>A2</PUBLIC_KEY> </ENTRY> <ENTRY email="B"> <PUBLIC_KEY>B1</PUBLIC_KEY> <PUBLIC_KEY>B2</PUBLIC_KEY> </ENTRY> 作为一般原则,如果您的 XML 格式难以处理,最好在处理的第一阶段将其清理,以避免使实际应用程序的逻辑复杂化。

回答 1 投票 0

将 XmlSerializer 与 Azure ShareFileClient 结合使用会创建大小不正确的文件

我正在尝试使用 XmlSerializer 将 XML 文件写入 azure 文件共享,但我的文件始终与我设置的 MaxSize 一样大。 我有一个 Azure 函数,它调用以下函数来写入 imp...

回答 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

XmlSerializer - 迭代分支

我有一个由外部源提供的 xml。我对它们的设计或功能没有发言权。 我可以到达初始分支并根据需要读取值。我害怕编辑,因为我无法访问任何其他内容...

回答 1 投票 0

使用XmlSerializer序列化派生类

我正在使用 XmlSerializer 序列化包含通用列表的对象 列表 子项 {get;set} 问题是每个元素都派生自 ChildBase,它实际上是一个ABS...

回答 3 投票 0

如何在 C# 中通过 ElementName 解析两个不同类中的 XML 字符串

我正在尝试将以下 XML 字符串解析为一个对象。它可以是“UpdateStructure”或“AddProcessLog”。基于我想将其解析为不同对象的类型。

回答 1 投票 0

XmlSerializer 更改/覆盖 DateTime 格式

我有一个 XSD,其中包含 DateTime 类型的定义,如下所示: ...

回答 1 投票 0

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