我有以下类结构
[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应该只序列化名称)
答案 0 :(得分:0)
您必须在反序列化后手动设置此项。在反序列化期间,不会调用构造函数。这是默认行为。