【问题标题】:DataContract surrogate for amplified value type放大值类型的 DataContract 代理
【发布时间】:2011-12-25 17:14:00
【问题描述】:

我想在 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 替换为字符串时出现 InvalidCastException?

【问题讨论】:

  • 另一个信息:代理转换异常发生在放大的 Guid 上。

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


【解决方案1】:

您不能对原始类型使用代理(即,当 T 是原始类型时,您将能够从 Amplified&lt;T&gt; 转换为 T,但不能在另一个方向上转换)。对于可能的替代方案,请查看https://docs.microsoft.com/en-us/archive/blogs/carlosfigueira/wcf-extensibility-serialization-callbacks 上的“原语序列化格式的细粒度控制”部分。

【讨论】:

  • 谢谢。这解释了很多。我们现在通过使用另一个序列化程序(Json.Net)解决了这个问题。
  • @Carlosfigueira 谢谢你帮我回答了我的question 的一部分,但如果你有更多关于这方面的内容,将不胜感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多