【问题标题】:Serialization doesn't accept my KnownTypeAttribute, why?序列化不接受我的 KnownTypeAttribute,为什么?
【发布时间】:2012-06-15 09:23:20
【问题描述】:

我遇到了一个序列化问题。我的 Silverlight 应用程序不希望我的属性之一在业务对象中,并且不知道如何处理它。以前我已经通过设置一个 KnownTypeAttribute 来解决这个问题,如下例所示,但在这种情况下它不起作用。

我以前是这样解决的:

[DataContract(Name = "baseClass")]
public class baseClass { }

[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }

[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}

知道的唯一区别是我的结构略有不同,如下所示:

[DataContract(Name = "baseClass")]
public class baseClass { }

[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }

[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
    public busObj1 myObj { get; set; }
}

// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }

我非常感谢任何关于可能出错的想法!

尊敬的同学

【问题讨论】:

    标签: c# .net wcf serialization


    【解决方案1】:

    您需要将已知类型属性放在基础对象上:

    [DataContract(Name = "baseClass")]
    [KnownType(typeof(busObj1))]
    [KnownType(typeof(busObj2))]
    [KnownType(typeof(busObj3))]
    [KnownType(typeof(busObj4))]
    public class baseClass { }
    
    [DataContract(Name = "busObj1")]
    public class busObj1 : baseClass { }
    
    [DataContract(Name = "busObj2")]
    public class busObj2 : baseClass { }
    
    [DataContract(Name = "busObj3")]
    public class busObj3 : busObj1
    {
        public busObj2 myObj { get; set; }
    }
    
    [DataContract(Name = "busObj4")]
    public class busObj4 : busObj3 { }
    

    或者,如果您不想用这些属性污染您的域模型,您也可以do it in your web.config or use the ServiceKnownType attribute on your Service Contract

    【讨论】:

    • 我以前不需要它。为什么在这种情况下?
    • 我不知道你为什么以前不需要它。您还没有展示您的服务合同是什么样子以及客户可以看到哪些类型。
    • 您的解决方案为我解决了问题,尽管对我来说仍然是一个谜,为什么有些解决方案有时有效,有时无效。还是谢谢!
    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多