当前位置: 首页 > 知识库问答 >
问题:

在unity中反序列化XML数组

孙熠彤
2023-03-14

我正在尝试反序列化XML文档中的对象数组。在以下结构中构建的文档:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <element>
      .....
   </element>
  <element>
      .....
   </element>
</root>

但由于某些原因,我有很多问题这样做。这是我的函数,我调用它来反序列化它:

public static CardModel[] Load(string text)
        {
            XmlRootAttribute xRoot = new XmlRootAttribute();
            xRoot.ElementName = "root";
            xRoot.IsNullable = true;
            
            XmlSerializer serializer = new XmlSerializer(typeof(CardModel[]),xRoot);
            StringReader reader = new StringReader(text);
            CardModel[] o = serializer.Deserialize(reader) as CardModel[];
            reader.Close();
            
            return o;
        }

我不确定它做得是否正确。因为我知道在json中无法反序列化数组,必须进行某种“hack”。

在CardModel类(它是数组的元素)中,我在类的上方使用标记[xmlroot(“root”)]。我也尝试过使用[XMLRoot(“Element”)],但仍然卡住了。

共有1个答案

嵇永望
2023-03-14

Afaik不能直接反序列化为数组,但需要一个包装类,如

[Serializable]
[XMLRoot("root")]
public class Root
{
    // This does the magic of treating all "element" items nested under the root
    // As part of this array
    [XmlArray("element")]
    public CardModel[] models;
}

而是反序列化成类似的

public static CardModel[] Load(string text)
{  
    // I don't think that you need the attribute overwrite here
   
    var serializer = new XmlSerializer(typeof(Root));
    using(var reader = new StringReader(text))
    {
        var root = (Root) serializer.Deserialize(reader);
        return root.models;
    }
}
 类似资料:
  • 我加载xml文件如下 使2类 我加载xml文件(temp.xml),然后序列化类2位置和头然后StringReader,它从文件中读取字符串,然后类序列化成为反序列化 但我看到error error msg在XML文档中有一个错误(1,1)。哪里?:at系统。Xml。序列化。XmlSerializer。在系统上反序列化(XmlReader XmlReader、String encodingStyl

  • 我在尝试反序列化xml时收到以下错误。这会产生错误: XmlSerializer serializer=新XmlSerializer(typeof(PrivateOptionsAPIResponse)) var result=序列化程序。反序列化(streamReader); 例外情况: 系统捕获到InvalidOperationException消息=XML文档(0,0)中有错误 InnerEx

  • 我想序列化一些XML。我的代码运行正常,但序列化不成功,对象为空,而不是填充数据。该值只是类型值:{OrangeCdToCollectorz.OrangeCd}。我怀疑我的阶级定义。以下是我正在序列化的类: 这是我的代码,尝试使用几种众所周知的技术对相同的XML进行反序列化,无论是作为字符串const还是来自文件: 以下是源XML的示例

  • 本文向大家介绍详解 C# 中XML对象的序列化和反序列化,包括了详解 C# 中XML对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 这一篇主要是用来介绍关于C#中的XML序列化的问题,这个相信大家一定会经常使用它,特别是在WPF中,有时候我们需要将我们后台的数据保存在数据库中,从而在软件下一次启动的时候能够自动去加载这些数据,由于我们的这些Model中字段众多,如果单独进行保存那是

  • 问题内容: 我已经开始在我的第一个android应用程序上进行工作,并且具有处理多层图像的应用程序。我能够将项目文件的平面版本导出为PNG,但我希望能够保存分层图像以供以后编辑(包括应用于某些层的任何选项,例如基于文本的层)。 无论如何,我已经确保需要写入文件的类是“可序列化的”,但是由于android.graphics.Bitmap不可序列化这一事实而遇到了一些障碍。以下代码实质上将位图作为PN

  • 问题内容: 我正在使用Xstream序列化Job对象。看起来不错。 但是反序列化,我有一个问题: 你们中的一个人以前遇到过这个问题吗? 这是我序列化的方法: 我也尝试这样做: 对于反序列化,我这样做是这样的: XML结构: 如果是,我想听听。提前致谢。 问题答案: fromXML没有文件名,请尝试: 以String形式读取文件内容。 在XStream中,字段名“ id”和“引用”也恰好是“系统属性