我有以下問題,考慮到以下服務契約,數據契約和服務實現,我應該如何讓WCF在沒有堆棧溢出的情況下序列化我的對象圖?WCF循環引用序列化和堆棧溢出錯誤
服務合同:
[ServiceContract]
public interface IService1
{
[OperationContract]
TestObjectA CircularSerializationTest();
}
數據契約
[DataContract(IsReference = true)]
public class TestObjectA
{
[DataMember]
public TestObjectB B { get; set; }
}
[DataContract(IsReference = true)]
public class TestObjectB
{
[DataMember]
public TestObjectC C { get; set; }
}
[DataContract(IsReference = true)]
public class TestObjectC
{
[DataMember]
public TestObjectA A { get; set; }
}
服務實現:
public class Service1 : IService1
{
public TestObjectA CircularSerializationTest()
{
var a = new TestObjectA();
var b = new TestObjectB();
var c = new TestObjectC();
a.B = b;
b.C = c;
c.A = a;
return a;
}
}
爲什麼是這個問題的獨特之處?首先,我已經能夠找到的每個其他示例都使用對象樹,或者它使用兩個對象之間的循環引用。在樹的實例(祖父母=>父母=>孩子)中,關係實際上並不是圓形的,但是在不同節點之間使用對象。或者,在第二種情況下,要麼同一個對象是循環的(Person有一個僱員也是人員的列表,這是我在MSDN上找到的一個例子)或者它的一個parent => child =>父關係是循環的,但不夠廣泛。另外,就我而言,它不可能將對象「扁平化」爲一棵樹,它們需要維護相同的對象引用。
在此先感謝您對此問題的任何建議或見解。
使用DataContractSerializer的原始實例對此進行測試。看看他的構造函數的遞歸選項。 – Brannon 2012-03-29 18:58:30
你是試圖做互操作還是僅僅是純粹的WCF通信? – 2012-03-29 19:06:02
@Brannon測試序列化與原始DataContractSerializer似乎序列化正確的圖形到控制檯,沒有任何選項被指定(DataContractSerializer的默認空構造函數),我想這個問題是爲什麼WCF有這樣的問題? – 2012-03-29 19:13:01