我想在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的“基元的串行化格式的精细控制”部分。
关于c# - DataContract代表放大值类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8072320/