如何在Unity中使用C#编写XML文件?

5

有人可以帮我吗!这对我来说真的很困惑。我在互联网上找不到任何一个能够清晰解释的人。所以这就是我需要的:

我需要有人解释如何在Unity中创建XML文件。有人告诉我要看一下流写入器。我已经搜索了相关内容,但没有人给出关于如何编写它的教程。我也不知道.NET是什么,请不要把它作为答案。我还查看了微软页面上有关XML文件的内容,但我无法找到正确的答案。这就是我正在寻找的全部内容:

我希望能够写出像这样的内容:

<Player>

    <Level>5<\Level>  
    <Health>500<\Health>  

<\Player>

我该如何创建这样的文件并将其导入到Unity?Unity如何读取此文件并从类似于此的信息中提取信息?请注意,我对.NET和XML完全不了解。

1个回答

15

假设你有一个类名为Player的类,看起来像这样:

[XmlRoot]
public class Player
{
    [XmlElement]
    public int Level { get; set; }

    [XmlElement]
    public int Health { get; set; }
}

以下是一个完整的往返行程,以帮助你开始:

XmlSerializer xmls = new XmlSerializer(typeof(Player));

StringWriter sw = new StringWriter();
xmls.Serialize(sw, new Player { Level = 5, Health = 500 });
string xml = sw.ToString();

Player player = xmls.Deserialize(new StringReader(xml)) as Player;

XML 是:

<?xml version="1.0" encoding="utf-16"?>
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Level>5</Level>
  <Health>500</Health>
</Player>

你猜 player 和我们序列化的原始对象完全相同。

如果你想将其序列化到文件或从文件反序列化,你可以这样做:

using (var stream = File.OpenWrite("my_player.xml"))
{
    xmls.Serialize(stream, new Player { Level = 5, Health = 500 });
}

Player player = null;
using (var stream = File.OpenRead("my_player.xml"))
{
    player = xmls.Deserialize(stream) as Player;
}

编辑:

如果你想要完全和你展示的XML相同:

XmlSerializer xmls = new XmlSerializer(typeof(Player));

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlWriterSettings settings = new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true };
using (var stream = File.OpenWrite("my_player.xml"))
{
    using (var xmlWriter = XmlWriter.Create(stream, settings))
    {
        xmls.Serialize(xmlWriter, new Player { Level = 5, Health = 500 }, ns);
    }
}

Player player = null;
using (var stream = File.OpenRead("my_player.xml"))
{
    player = xmls.Deserialize(stream) as Player;
}

好的,这很有趣。请解释一下,什么是序列化和反序列化?谢谢,答案很棒。 - Abraham
另外,请您解释一下这些部分:<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xmls.Serialize(sw, new Player { Level = 5, Health = 500 }); string xml = sw.ToString();Player player = xmls.Deserialize(new StringReader(xml)) as Player; - Abraham
1
序列化 生成对象的 XML 表示形式。反序列化 则相反:从它们的 XML 表示形式生成对象。 - Pragmateek
1
"xmlns:xsi..."和其他的内容只是XML的基础结构,你可以忽略它们并安全地处理数据。 - Pragmateek
嘿,我可以像我给你展示的那样编写一个XML文件吗?我必须按照你给我的方式来编写它吗? - Abraham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接