1

我想在DataContract類中使用自定義的aplified類型(可以爲Nullable)。 我試圖寫一個IDataContractSurrogate但它在反序列化時失敗。DataContract用於放大值類型的代理

我的放大型看起來是這樣的:

public struct Amplified<TValue> 
{ 
    public TValue Value { get; set; } 
    //... some special code ... 
} 

而一個DataContract可能是這樣的:

[DataContract] public class MyDTO 
{ 
    [DataMember] public Amplified<string> SpecialString { get; set; } 
} 

上面的代碼工作,但會產生不必要的嵌套與放大型的Value屬性。我希望DataContract能夠像線路上的普通字符串那樣表示Ampliefied。

這可能與DataContract串行器(JSON & Xml)? 爲什麼我在使用IDataContractSurrogate將字符串替換爲Amplified時遇到InvalidCastException?

+0

另一個信息:代理演員例外與放大的Guid發生。 – sanosdole

回答

1

您不能對原始類型使用代理(即,當T是原語而不是其他方向時,您可以將其從Amplified<T>轉換爲T)。作爲可能的替代方案,請參閱http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx的「細粒度控制基元的序列化格式」部分。

+0

Thx。這解釋了很多。我們現在通過使用另一個序列化程序(Json.Net)解決了這個問題。 – sanosdole

相關問題