xmlserializer 相关问题

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

如何使用 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

忽略列表中的属性的XmlIgnore。

我如何忽略我试图序列化的另一个类型的列表中的属性? public string SerializeTag(List) reservedTags) { string ...

回答 1 投票 1

如何在XML文档中使用c#添加一个新元素

我需要的是在一个已经存在的XML文档中添加一个新元素。这就是XML。我需要的是在元素的结尾添加这个元素 真正

回答 1 投票 0

调用http post方法时,用于xml数据的序列化器(Ktor lib)

由于我是Android的新手,因此我正在构建一个应用程序,需要在该应用程序中更新Geo服务器上的图层数据。对于这种情况,我将与XML正文请求一起调用post方法。我需要发送...

回答 1 投票 10

反序列化对象忽略某些节点

我有一个使用XmlSerializer序列化的对象。当尝试将此XML文件反序列化回对象时,由于某种原因,它会跳过节点。

回答 1 投票 0

该进程无法访问该文件,因为它正在被另一个进程使用-EF Core序列化XML

我正在尝试编写一种方法来从Northwind数据库中获取类别及其各自的产品,然后使用xml序列化写入文件。我已经尝试了以下代码...

回答 1 投票 0

为什么在XML序列化期间将名称空间添加到子节点?

[我有一个用于XML序列化的类,如下所示:[XmlRoot(ElementName =“ XXX”,Namespace =“ http://www.example.com/Schemas/xxx/2011/11”)]公共类Xxx 其中T:装运{[...] >>

回答 1 投票 1

Symfony序列化器XML将自定义属性添加到根节点

当生成带有Seri alizer组件的XML文件时(在Symfony4中),我想向根节点添加一个自定义属性,但是我不知道该怎么做。文档提到了如何命名根节点,但是...

回答 1 投票 2

XmlSerializer将文件中的“加载为”;反序列化期间-当XML包含希伯来语时

这里是我的xml: 123456 תמציתמרווהמשולשתSP 1:2-מ"ל100 Salvia fruitcosa

回答 2 投票 1

XMLSerializer在TeamCity上产生不同的结果

我们已经为TeamCity添加了旧版解决方案。尽管其中一项在本地通过,但其中一项单元测试现在已失败。单元测试检查XmlSerializer的实际输出字符串是否为...

回答 3 投票 1

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