我想在DataContract类中使用自定义的aplified类型(想想Nullable)。
我尝试编写IDataContractSurrogate
,但在反序列化时失败了。
我的放大类型如下:
public struct Amplified<TValue>
{
public TValue Value { get; set; }
//... some special code ...
}
DataContract可能如下所示:
[DataContract] public class MyDTO
{
[DataMember] public Amplified<string> SpecialString { get; set; }
}
上面的代码可以工作但是使用Amplype的Value属性产生不必要的嵌套。我希望DataContract像线上的普通字符串一样代表Ampliefied。
DataContract Serializers(JSON&amp; Xml)可以实现吗? 为什么在使用IDataContractSurrogate将Amplified替换为字符串时会出现InvalidCastException?
答案 0 :(得分:1)
您不能将代理用于原始类型(即,当T是基元时,您将能够从Amplified<T>
转换为T
,而不是另一个方向。有关替代方案,请查看http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx处的“基元序列化格式的细粒度控制”部分。