如何传递包含项目词典的项目字典?

时间:2011-05-10 22:26:18

标签: wcf silverlight-4.0 datacontractserializer

我有一项服务,我试图传递对象字典。一切顺利,直到我添加一个对象字典,然后包含一个字典到另一个对象。导致问题的字典将在下面的示例中为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'   到已知类型列表 - for   例如,通过使用   KnownTypeAttribute属性或   将其添加到已知类型列表中   传递给DataContractSerializer。'

1 个答案:

答案 0 :(得分:1)

为了尝试解决失败的问题,我设置了一个简单的WCF服务,该服务返回一个非常基本的嵌套Dictionary,它可以很好地处理添加到它的一些项目。

    [OperationContract]
    Dictionary<int, Dictionary<int, int>> GetDictionary();

基于此,我假设你的对象存在问题(&amp; 或许它们在Dictionary集合中)。我建议你做一些测试来缩小你的问题。

您的类是否可序列化 - 您可以反序列化您的类型的单个实例吗? (例如,写一个操作来返回像MyClass GetOneInstance();这样的对象。您是否能够返回一个简单的Dictionary班级?

如果您的类与您的服务或操作具有相同的名称,例如操作GetSomething和名为GetSomethingRequest的对象,WCF可能会向您抛出一些命名冲突。或GetSomethingResponse不能很好地协同工作 - 主要是由于请求和响应被放入自动命名的SOAP信封中。如果您的类使用某些保留字命名,您可以尝试重命名它们。

该例外表明您添加了KnownType属性。这通常适用于返回可能是继承类型实例的基类型 - 是这种情况吗?您的对象是否涉及继承,并且您是否返回可能是继承类型实例的基类型? (例如A:B,您的操作会返回B,但可能是A