我試圖通過Windows Communication Foundation傳遞一個複雜的對象,但是我得到了讀取錯誤。我能夠binaryFormat對象到一個文件並重新加載並反序列化它。所有組件/引用組件類都用Serializable屬性標記。在一輪工作中,我將對象序列化爲內存流,通過WCF傳遞內存流,然後在另一端對內存流進行deSerialized。雖然我可以接受這個解決方案,但它看起來並不是很整齊。我似乎無法確定能夠從代理中讀取哪些標準。相對簡單的對象,甚至包含對另一個類的引用的對象都可以被傳遞和讀取,而沒有任何屬性。歡迎任何意見。序列化WCF的複雜對象
編輯:無法識別的錯誤109(0x6d)System.IO.IOException讀取操作失敗。
編輯爲請求這裏的類和基類。它非常複雜,這就是爲什麼我沒有在開始時包含代碼,但它的二進制序列化很好。
[Serializable]
public class View : Descrip
{
//MsgSentCoreDel msgHandler;
public Charac playerCharac { get; internal set;}
KeyList<UnitV> unitVs;
public override IReadList<Unit> units { get { return unitVs; } }
public View(Scen scen, Charac playerCharacI /* , MsgSentCoreDel msgHandlerI */)
{
playerCharac = playerCharacI;
//msgHandler = msgHandlerI;
DateTime dateTimeI = scen.dateTime;
polities = new PolityList(this, scen.polities);
characs = new CharacList(this, scen.characs);
unitVs = new KeyList<UnitV>();
scen.unitCs.ForEach(i => unitVs.Add(new UnitV(this, i)));
if (scen.map is MapFlat)
map = new MapFlat(this, scen.map as MapFlat);
else
throw new Exception("Unknown map type in View constructor");
map.Copy(scen.map);
}
public void SendMsg(MsgCore msg)
{
msg.dateT = dateTime;
//msgHandler(msg);
}
}
而這裏的基類:
[Serializable]
public abstract class Descrip
{
public DateTime dateTime { get; set; }
public MapStrat map { get; set; }
public CharacList characs { get; protected set; }
public PolityList polities { get; protected set; }
public abstract IReadList<Unit> units { get; }
public GridElList<Hex> hexs { get { return map.hexs; } }
public GridElList<HexSide> sides { get { return map.sides; } }
public Polity noPolity { get { return polities.none; } }
public double hexScale {get { return map.HexScale;}}
protected Descrip()
{
}
public MapArea newMapArea()
{
return new MapArea(this, true);
}
}
如果您發佈了例外情況,我敢打賭它會明確說明您必須如何解決該問題。你可以這樣做嗎? –
您可以發佈您正在使用的類的一個小例子和WCF接口方法定義嗎? –
需要聽到**確切的**錯誤。如果我不得不猜測:遞歸樹 –