【问题标题】:Wcf serialization of member of type OBJECTOBJECT 类型成员的 Wcf 序列化
【发布时间】:2012-08-11 13:48:35
【问题描述】:

我有 DataContract (BalanceClassificationAttribute),它有一个对象类型的字段。

[DataContract]
[KnownType(typeof(string))]
[KnownType(typeof(long))]
[KnownType(typeof(int))]
[KnownType(typeof(uint))]
public class BalanceClassificationAttribute
{
    /// <summary>
    /// Value of searching attribute.
    /// </summary>
    [DataMember]
    public Object Value
    {
        get;
        set;
    }
}

该字段的值可以是string、long、int、uint

A 添加了这些属性字节

[KnownType(typeof(string))]
[KnownType(typeof(long))]
[KnownType(typeof(int))]
[KnownType(typeof(uint))]

但是这个 DataContract 不起作用。我还能做什么?

【问题讨论】:

  • 您还需要添加[KnownType(typeof(object))]

标签: wcf object serialization


【解决方案1】:

KnownTypeAttribute 的主要目的是处理肥皂消息反序列化中的类型继承场景。您正试图将其用作对原始类型执行数据转换的一种方式。您最安全的选择是通过对您在KnownType 列表中引用的类型的一系列TryParse 调用来处理值的数据转换。

【讨论】:

  • 嗨!您提议将此字段保留为对象?在这种情况下,该方法(使用此 DataContract)在我的 WCF 测试客户端中不可用。
  • 实际上,我建议将属性类型设置为string,因为这样可以更轻松地使用各种TryParse 方法。您对转换结果的处理是您的应用程序的设计问题,但我会避免使用 Object 类型,因为它会使它包含的实际类型不透明,除非您使用反射。
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多