可能的this questionWCF序列化问题具有复杂类型
我试图序列化一组使用标准DataSerializer
这是用来与wcf
对象的副本。
对象结构:
[KnownType(typeof(PersonnelClassProperty))]
[KnownType(typeof(ResourceClassProperty))]
[KnownType(typeof(Person))]
[KnownType(typeof(PersonProperty))]
[KnownType(typeof(ResourceDefinitionProperty))]
[DataContract]
public class Person: ResourceDefinition
{
[DataMember]
public guid id {get; set;}
[DataMember]
public IList<PersonProperty> personProperties {get; set;}
[DataMember]
public IList<PersonnelClass> personnelClasses {get; set;}
}
PersonProperty:ResourceDefinitionProperty
- PersonnelClassProperty
PersonnelClass:ResourceClass
- Pers的插件
- PersonnelClassProperty
PersonnelClassPoperty:ResourceClassProperty
上述结构使用Nhibernate
映射。所以基类是abstract classes
,它具有基本属性,我们将其覆盖到主类中。我们使用这个,所以我们可以使用一个通用的类来调用Nhibernate
中的CRUD函数。
这个构成的第一个问题是一个循环引用,我们解决了这个问题。通过重置对象列表,我们消除了循环引用问题。
我们也遍历属性和关联的类属性来获取它们,因为它们是通过nHibernate
这让我产生一些测试数据被延迟加载。我们现在有一个personnelclass
与personnelclassproperty
。这些都可以自行检索。接下来我们有一个person
。我们添加了对personnelclass
和personnelclassproperty
的引用。在数据库中,我们有一个额外的表格,该表格包含人与personnelclass
之间的链接的参考,因为这是many-to-many relationShip
。 personProperty
有一个参考单personnelClassproperty
,所以在这里一个FK
就足够了。
这里,我们碰上了第二个问题,发生了系列化例外:
“PersonnelClassPropertyProxy”数据合同名称“PersonnelClassPropertyProxy:http://schemas.datacontract.org/2004/07/”预计不会。考虑使用DataContractResolver或将任何不知道的类型静态添加到已知类型的列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型的列表中。
所以从第一行继续讲到[DataContract]
,[DataMember]
和[KnownType(typeof(T))]
属性添加到上面提到的类中提到的问题作出。 T
当然是正确的类型。
发生的事情是,我们派人通过WCF到接收方,其工作微小物体,如果是personProperty
和personnelClassProperty
之间没有联系,但如果我们用一个链接添加一个personproperty
到PersonnelClassProperty
,我们得到的异常上文提到的。
所有的例子和问题我在网上看到的相同的方式工作
这么具体;我究竟做错了什么?或者我在这里忘了什么?
我会尝试用更多的代码来更新问题来说明我们使用的对象。
编辑:我更新了Person
对象的结构来展示一下我与KnownTypes
完成。请注意,这也包含personnelClassProperty
类型,我也为PersonProperty
对象执行了此操作,因为这是保留PersonnelClassProperty
对象的实际类,但在Person
中使用了personProperties
列表。这也不起作用。