我有一个服务,我试图传递一个对象字典通过。一切都很好,直到我向另一个对象添加了一个包含字典的对象字典。在下面的例子中,导致问题的字典将是A类。
//example
public class A
{
public Dictionary<string,B> BValues { get; set; }
}
public class B
{
public Dictionary<string, C> CValues { get; set; }
}
public class C
{
int x;
int y;
}我已经尝试让字典知道我的服务中的类型,并确保其他类被标记为数据契约,它们的属性被标记为DataMember属性。我不知道我还需要做些什么,甚至可以做些什么来完成这个任务。
编辑
例外情况:
'schemas.microsoft.com/2003/10/Serialization/Arrays:Value';元素包含'schemas.microsoft.com/2003/10/Serialization/…;数据契约的数据。反序列化器不知道映射到该契约的任何类型。将与“ArrayOfKeyValueOfstringClassValuesNSpYOWsW”对应的类型添加到已知类型的列表中--例如,使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中。
发布于 2011-05-12 00:53:28
为了找出失败的地方,我设置了一个简单的WCF服务,它返回一个非常基本的嵌套Dictionary,它可以很好地工作,添加了许多项。
[OperationContract]
Dictionary<int, Dictionary<int, int>> GetDictionary();基于此,我假设您的对象(可能是Dictionary集合中的对象)存在问题。我建议你做些测试来缩小你的问题。
您的类可序列化吗?您可以反序列化类型的单个实例吗?(例如编写一个操作来返回像MyClass GetOneInstance();这样的对象)。您能够返回类的简单Dictionary吗?
WCF可能会向您抛出一些命名冲突--如果您的类具有与您的服务或操作相同的名称,例如,一个操作GetSomething和一个名为GetSomethingRequest或GetSomethingResponse的对象将不能很好地协同工作--这主要是因为将请求和响应自动放入--命名为SOAP信封。如果您的类使用某些保留字命名,则可以尝试重命名它们。
异常表明您添加了KnownType属性。这通常适用于当您返回一个基类型时,它可能是继承类型的实例--是这样吗?对象是否涉及继承,并且是否返回基类型,这些类型可能是继承类型的实例?(例如,A:B和您的操作返回一个B,但可能是一个A)
https://stackoverflow.com/questions/5957232
复制相似问题