我想在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; }
}
上面的代码可以工作,但是使用放大类型的Value属性会产生不必要的嵌套。我希望DataContract能够像导线上的普通字符串一样表示Ampliefied。
DataContract序列化器(JSON和Xml)是否可以?为什么在使用IDataContractSurrogate将Amplified替换为string时出现InvalidCastException?
您不能对原始类型使用替代(即,当T是原始时,您可以从Amplified<T>
转换为T
,但不能在其他方向上转换)。作为一种可能的选择,请查看http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx(存档的here)中的“针对基元的细化序列化格式的精细控制”部分。