我想在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/

10-11 16:52