[DataContract代表放大值类型

问题描述 投票:2回答:1

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

c# .net functional-programming datacontractserializer datacontract
1个回答
2
投票

您不能对原始类型使用替代(即,当T是原始时,您可以从Amplified<T>转换为T,但不能在其他方向上转换)。作为一种可能的选择,请查看http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx(存档的here)中的“针对基元的细化序列化格式的精细控制”部分。

© www.soinside.com 2019 - 2024. All rights reserved.