DataContract代替放大值类型

时间:2011-11-09 21:58:39

标签: c# .net functional-programming datacontractserializer datacontract

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

1 个答案:

答案 0 :(得分:1)

您不能将代理用于原始类型(即,当T是基元时,您将能够从Amplified<T>转换为T,而不是另一个方向。有关替代方案,请查看http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx处的“基元序列化格式的细粒度控制”部分。