我有以下类结构
[Serializable]
public class Manager
{
List<item> items
List<Mod> mods
[XmlArray("Items"), XmlArrayItem(typeof(Item), ElementName = "Item")]
public List<Item> Items
{
get
{
return items;
}
}
[XmlArray("Mods"), XmlArrayItem(typeof(Mod), ElementName = "Mod")]
public List<Mod> Mods
{
get
{
return mods;
}
}
}
[Serializable]
public class Item
{
string name;
Mod mod;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Mod Mod
{
get
{
return mod;
}
set
{
mod = value;
}
}
private Item()
{ }
public Item(string name, Mod mod)
{
this.Name = name;
this.Mod = mod;
}
}
序列化按预期进行,但是当我反序列化时,我希望 item.Mod 对象指向 mods 列表中的对象。相反,它会创建一个新实例。有没有办法做到这一点?
我现在要做的是在反序列化后手动收集正确的实例
foreach (Item item in instance.Items)
{
item.Mod = instance.Mods.Find(x => x.Name == item.Mod.Name);
}
如果不可能,那么有没有办法只序列化项目中的 mod.Name ?(所以 mod 本身应该完全序列化,但 item.mod 应该只序列化名称)