Export to GitHub

protobuf-net - issue #455

sub-classes serialization


Posted on Mar 24, 2015 by Happy Wombat

Please include an e-mail address if this might need a dialogue! Derek.Streyt.aw@gmai.rom ==============

What steps will reproduce the problem? 1. I created 2 classes

[ProtoContract(SkipConstructor = true)] public class BuildConstruct : TimingBase { [ProtoMember(1)] public string name;

public BuildConstruct():base(1)  { }

protected override void Complete()
{
}

}

and

[ProtoContract(SkipConstructor = true)] public class BuildingWithWorkers : TimingBase { [ProtoMember(1)] public GameResources BuildResources { get; protected set; }

public List<Worker> Workers { get; protected set; }

[ProtoMember(2)]
public List<int> WorkerIds { get; protected set; }

public BuildingWithWorkers(float time, List<Worker> workers = null,  GameResources resources = null) : base(time)
{
    if (workers != null)
    {
        Workers = new List<Worker>(workers);
        WorkerIds = new List<int>();
        foreach (Worker worker in workers)
        {
            WorkerIds.Add(worker.CurrentUnit.Id);
        }
    }

    BuildResources = resources;
}

public override void OnRemove(Unit unit)
{
    base.OnRemove(unit);
    foreach (Worker worker in Workers)
    {
        worker.CurrentWork = null;
    }
}


public virtual void Cancel(MacroGameEngine engine)
{
    engine.Resources = engine.Resources += BuildResources;
    CurrentUnit.RemoveStrategy(this);
}


protected override void Complete()
{

}

}

base class UnitStrategyBase

[
ProtoContract(),
ProtoInclude(2001, typeof(ArmyFarm)),
ProtoInclude(2002, typeof(BuildingBase)),
ProtoInclude(2003, typeof(BuildingHealth)),
ProtoInclude(2004, typeof(BuildingWithWorkers)), /// !!!
ProtoInclude(2005, typeof(Construction)),
ProtoInclude(2006, typeof(FarmBase)),
ProtoInclude(2007, typeof(HealthBase)),
ProtoInclude(2008, typeof(Repair)),
ProtoInclude(2009, typeof(SyncBase)),
ProtoInclude(2010, typeof(TimingBase)),
ProtoInclude(2011, typeof(UnitHealth)),
ProtoInclude(2012, typeof(Worker)),
ProtoInclude(2013, typeof(WorkerFarm)),
ProtoInclude(2014, typeof(BuildConstruct)) // !!!

]
public abstract class UnitStrategyBase 
{

... }

  1. Serialize first - InvalidOperationException: Unexpected sub-type:InvalidOperationException: Unexpected sub-type: BuildConstruct ? why, i set this in protoinclude.

  2. Serialize second - ok

protobuf-net r668 win 8.1

Status: New

Labels:
Type-Defect Priority-Medium