【问题标题】:How to write an XML file in C# in Unity?如何在 Unity 中用 C# 编写 XML 文件?
【发布时间】:2013-06-24 22:37:35
【问题描述】:

请有人帮忙!这对我来说真的很困惑。我在互联网上找不到任何人可以很好地解释这一点。所以这就是我需要的: 我需要有人解释如何在 Unity 中创建 XML 文件。人们告诉我看一个流作家。我已经搜索过了,但没有人给出如何编写它的教程。我也不知道.NET 是什么,所以请不要给我这个答案。我也浏览了 XML 文件的微软页面,但我找不到正确的答案。这就是我正在寻找的所有内容:

我希望能够写出这样的东西:

<Player>

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

<\Player>

如何制作这样的文件并将其导入 Unity?如何让 Unity 读取此文件并从中提取信息?请在整个 .NET 和 XML 方面,我是一个完全的 n00b。

【问题讨论】:

    标签: c# xml multithreading unity3d


    【解决方案1】:

    假设你有一个 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;
    }
    

    【讨论】:

    • 好吧,这很有趣。请解释一下,什么是序列化和反序列化?谢谢和惊人的答案
    • 另外,你能解释一下这些部分吗: w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema"> xmls.Serialize(sw, new Player { Level = 5 , 健康 = 500 });字符串 xml = sw.ToString(); Player player = xmls.Deserialize(new StringReader(xml)) as Player;
    • Serialize 生成对象的 XML 表示。 Deserialize 则相反:从它们的 XML 表示中生成对象。
    • "xmlns:xsi..." 其他东西只是 XML 管道,您可以忽略它们并安全地使用它。
    • 嘿,我可以像我向您展示的那样编写一个 XML 文件吗?我必须按照你给我看的方式写吗?
    猜你喜欢
    • 2011-09-17
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多