【发布时间】:2020-07-19 01:20:17
【问题描述】:
我正在尝试序列化配置列表。每个配置都包含三种对象类型,我已将它们全部设为可序列化。出于某种原因,当我尝试序列化列表时它只输出:
- <cart_configurations>
<ArrayOfAnyType/>
</cart_configurations>
我假设此问题与尝试序列化 List 而不是数组有关?
这是我的保存/加载代码
public static class SaveSystem
{
public static void UpdateConfigurations(Configurations configurations)
{
string path = Application.persistentDataPath + "/CartConfigurations.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Configurations));
FileStream stream = new FileStream(path, FileMode.Create);
serializer.Serialize(stream, configurations);
stream.Close();
}
public static Configurations LoadConfigurations()
{
string path = Application.persistentDataPath + "/CartConfigurations.xml";
if (File.Exists(path))
{
XmlSerializer serializer = new XmlSerializer(typeof(Configurations));
FileStream stream = new FileStream(path, FileMode.Open);
Configurations configurations = (Configurations) serializer.Deserialize(stream);
stream.Close();
return configurations;
}
else
{
Debug.Log("nothin");
return null;
}
}
}
这是我尝试保存/加载的对象的代码
[System.Serializable]
[System.Xml.Serialization.XmlRoot("cart_configurations")]
public class Configurations : List<Configuration>
{
[XmlElement("configuration")]
public List<Configuration> cart_configurations = new List<Configuration>();
}
[System.Serializable]
public class Configuration : List<object>
{
[XmlElement("name")]
public string Name;
[XmlElement("option_data")]
public Dropdown.OptionData optionData = new Dropdown.OptionData();
[XmlElement("tire_type")]
public TireType TireType;
[XmlElement("body_type")]
public BodyType BodyType;
[XmlElement("spoiler_type")]
public SpoilerType SpoilerType;
public Configuration()
{
}
public Configuration(string name, TireType tireType, BodyType bodyType, SpoilerType spoilerType)
{
Name = name;
optionData.text = name;
TireType = tireType;
BodyType = bodyType;
SpoilerType = spoilerType;
}
}
[System.Serializable]
public class TireType : object
{
[XmlElement("type")]
public string type = "TireType";
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("weight")]
public int Weight { get; set; }
[XmlElement("grip")]
public int Grip { get; set; }
[XmlElement("mesh")]
public GameObject Mesh { get; set; }
[XmlElement("collider")]
public GameObject Collider { get; set; }
public TireType()
{
}
public TireType(string name, int weight, int grip, GameObject mesh, GameObject collider)
{
Name = name;
Weight = weight;
Grip = grip;
Mesh = mesh;
Collider = collider;
}
}
BodyType 和 Spoiler Type 与 TireType 类几乎相同。 此外,Configuration 类仅实现 List,因为 XmlSerializer 需要添加功能。如果您知道更好的解决方案,也将不胜感激。
非常感谢您提前提供的帮助。
【问题讨论】:
-
Xml 序列化不允许在根处使用数组。您有: public class Configurations : List
这是无效的。删除继承的类。
标签: c# xml unity3d xml-serialization xmlserializer