C#xml(de)子对象的序列化

时间:2013-03-13 14:23:10

标签: c# xml

我有以下类结构

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

1 个答案:

答案 0 :(得分:0)

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