1

我有以下类结构

[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 应该只序列化名称)

4

1 回答 1

0

您必须在反序列化后手动设置。在反序列化期间,不会调用您的构造函数。这是默认行为。

于 2013-03-13T14:29:18.813 回答