Unity3d 无法序列化检查器中的类

Unity3d 无法序列化检查器中的类,unity3d,serialization,Unity3d,Serialization,我知道那里有很多类似的问题,但我没有找到解决问题的办法 我有一个简单的课程: using System; [Serializable] public class CountryInternalData { public string title; public string textID; public int confederationID; public int numericID; } 我试图在另一个类上使用它的数组列表: using System.Co

我知道那里有很多类似的问题,但我没有找到解决问题的办法

我有一个简单的课程:

using System;

[Serializable]
public class CountryInternalData
{
    public string title;
    public string textID;
    public int confederationID;
    public int numericID;
}
我试图在另一个类上使用它的数组列表:

using System.Collections.Generic;
using UnityEngine;
using System;

[Serializable]
public class ConfederationAffiliatedCountriesLink : MonoBehaviour
{
    public List<CountryInternalData>[] affiliatedCountriesByConfederation;

    //SOME OTHER CODE (unrelated to the question IMO)

    void TestAffiliatedCountries()
    {
        var confederations = contentManager.loadedConfederations;
        var arraySize = confederations.Count;

        affiliatedCountriesByConfederation = new List<CountryInternalData>[arraySize];
        //LOOPS that fill the array list (unrelated to the question IMO)
    }
}
使用System.Collections.Generic;
使用UnityEngine;
使用制度;
[可序列化]
公共类联合会附属国家链接:单一行为
{
公共名单[]附属国家联合会;
//其他一些代码(与IMO问题无关)
无效测试关联国家()
{
var confederations=contentManager.loadedConfederations;
var arraySize=联合会。计数;
affiliatedCountriesByConfederation=新列表[排列];
//填充数组列表的循环(与问题无关)
}
}
尽管使用了
[Serializable]
属性,但是
附加的CountriesByConFederation
不会出现在检查器中:


我的印象是,这可能是一些基本的东西,但我面临着一个艰难的时刻来找出我在这里遗漏了什么。我的目标是建立一个简单的保存和加载系统,为我的游戏创建数据,因此我需要检查保存的内容是否正确加载,这就是为什么在inspector中查看数据对我非常有用…

嵌套数组/列表未序列化。看

注意:Unity不支持多级类型(多维数组、交错数组和嵌套容器类型)的序列化。如果要序列化这些,有两个选项:将嵌套类型包装在类或结构中,或使用序列化回调ISerializationCallbackReceiver执行自定义序列化。有关详细信息,请参阅有关自定义序列化的文档

所以你可以使用一个包装器类型,比如

[可序列化]
公共类数据
{
公共字符串标题;
公共字符串textID;
公共国际联合会ID;
公共整数;
}
[可序列化]
公共类数据收集
{
公共列表数据=新列表();
//仍然通过索引直接访问元素的索引器
//=>无需每次写入.数据
公共国家内部数据此[int索引]
{
get=>数据[索引];
set=>数据[索引]=值;
}
公共作废添加(CountryInternalData项)
{
数据。添加(项目);
}
//和evtl其他方法,如果需要的话
}
然后使用

public CountryInternalDataCollection[]附属countriesbyconfederation;

嵌套数组/列表未序列化。看

注意:Unity不支持多级类型(多维数组、交错数组和嵌套容器类型)的序列化。如果要序列化这些,有两个选项:将嵌套类型包装在类或结构中,或使用序列化回调ISerializationCallbackReceiver执行自定义序列化。有关详细信息,请参阅有关自定义序列化的文档

所以你可以使用一个包装器类型,比如

[可序列化]
公共类数据
{
公共字符串标题;
公共字符串textID;
公共国际联合会ID;
公共整数;
}
[可序列化]
公共类数据收集
{
公共列表数据=新列表();
//仍然通过索引直接访问元素的索引器
//=>无需每次写入.数据
公共国家内部数据此[int索引]
{
get=>数据[索引];
set=>数据[索引]=值;
}
公共作废添加(CountryInternalData项)
{
数据。添加(项目);
}
//和evtl其他方法,如果需要的话
}
然后使用

public CountryInternalDataCollection[]附属countriesbyconfederation;

谢谢,它解决了这个具体的疑问。碰巧我最终没有使用数组列表,因为我试图将它用于两种类型,根据我的研究,这是不可能的。我的最终解决方案是创建一个包含这两种类型的新类,然后创建该类的列表…谢谢,它解决了这个特定的疑问。碰巧我最终没有使用数组列表,因为我试图将它用于两种类型,根据我的研究,这是不可能的。我的最终解决方案是创建一个包含这两种类型的新类,然后创建该类的列表。。。