You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:47:26