如何用XmlSerializer反序列化字符串数组?Dialogue类sentences为空问题
解决XmlSerializer反序列化时string[]数组为空的问题
问题原因
你的XML中对话内容采用<sentences>节点包裹多个<sentence>子节点的结构,但Dialogue类里的sentences是string[]类型,默认XmlSerializer会期望数组元素的节点名和数组字段名一致(即<sentences>),而非<sentence>,导致无法正确映射,最终数组为空。
解决方案
给Dialogue类的sentences字段添加XML序列化特性,明确指定外层节点和子节点的名称,同时需引入System.Xml.Serialization命名空间。
修改后的Dialogue类代码:
using UnityEngine; using System.Xml.Serialization; // 新增命名空间 [CreateAssetMenu(fileName = "NewDialogue", menuName = "Dialogue")] public class Dialogue : ScriptableObject { public string characterName; // 캐릭터 이름 [TextArea(3, 20)] [XmlArray("sentences")] // 指定外层包裹节点名 [XmlArrayItem("sentence")] // 指定每个数组元素对应的节点名 public string[] sentences; // 대화 내용 public int oID = -1; public int nextoID = -1; public int animID = -1; }
特性说明
[XmlArray("sentences")]:告知序列化器,该数组对应的外层父节点名称为<sentences>,与你的XML结构完全匹配。[XmlArrayItem("sentence")]:指定数组中每个字符串元素对应的XML子节点名称为<sentence>,对应XML里的单条对话内容节点。
修改后重新运行反序列化逻辑,sentences数组即可正确读取XML中的对话内容。
内容的提问来源于stack exchange,提问作者Dalim Oh
相关产品推荐
相关产品推荐

