2012-08-15 85 views
1

我有DataContract(BalanceClassificationAttribute),它有一个对象类型的字段。类型OBJECT成员的Wcf序列化

[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; 
    } 
} 

该字段值可以是字符串,长,INT,UINT

一个添加了这些attribytes

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

但这DataContract不起作用。我能做些什么?

+0

您还需要添加'[KnownType(typeof(object))]' – 2014-07-29 03:44:03

回答

0

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

+0

嗨!你提供离开这个领域作为对象?在这种情况下,使用此DataContract的方法在我的WCF测试客户端中不可用。 – 2012-08-16 07:21:10

+0

实际上,我建议将属性类型设置为'string',因为这样可以更容易地使用各种'TryParse'方法。你对转换后的结果所做的事情是你的应用程序的设计问题,但我会避免使用“Object”类型,因为它使得它包含的实际类型不透明,除非使用反射。 – 2012-08-16 12:47:50