私は次のクラス構造を持っています
[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 は名前のみをシリアル化する必要があります)