Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典KnownType的WCF问题_C#_Wcf_Dictionary - Fatal编程技术网

C# 字典KnownType的WCF问题

C# 字典KnownType的WCF问题,c#,wcf,dictionary,C#,Wcf,Dictionary,我有一个实现以下DataMember的服务: [DataMember] public Dictionary<string, List<IOptionQueryResult>> QueryResultItems { get; set; } 我想你会用: [KnownType(typeof(OptionQuerySingleResult)] 但是在OptionQuerySingleResult类上还需要一个[DataContract(Name=“OptionQuerySi

我有一个实现以下DataMember的服务:

[DataMember]
public Dictionary<string, List<IOptionQueryResult>> QueryResultItems { get; set; }
我想你会用:

[KnownType(typeof(OptionQuerySingleResult)]
但是在OptionQuerySingleResult类上还需要一个
[DataContract(Name=“OptionQuerySingleResult”)]

我认为这还取决于SVCUTIL.EXE util生成的客户端代理类。

我认为您可以使用:

[KnownType(typeof(OptionQuerySingleResult)]
但是在OptionQuerySingleResult类上还需要一个
[DataContract(Name=“OptionQuerySingleResult”)]


我认为这还依赖于SVCUTIL.EXE util生成的客户端代理类。

您只需将以下属性添加到datacontract类中即可

[DataMember]
public object UsedForKnownTypeSerializationObject;
因此,现在生成的代理包含您在datacontract上设置的Knowtypes。 我也有同样的问题,这是我想出的唯一解决办法。 如果您不在DataContract类的类型为Object的属性处, 生成的代理不包含声明的knowtypes

例如:

[DataContract]
[KnownType(typeof(List<String>))]
public class Foo
{
    [DataMember]
    public String FooName { get; set; }

    [DataMember]
    public IDictionary<String, Object> Inputs { get; set; }

    [DataMember]
    private Object UsedForKnownTypeSerializationObject{ get; set; }

}
[DataContract]
[知识类型(类型(列表))]
公开课Foo
{
[数据成员]
公共字符串FooName{get;set;}
[数据成员]
公共IDictionary输入{get;set;}
[数据成员]
私有对象UsedWorkNownTypeSerializationObject{get;set;}
}
它不那么漂亮,因为你最终得到了一个没有任何属性的虚拟属性
功能实现。但是我没有其他解决方案。

您只需将以下属性添加到datacontract类中即可

[DataMember]
public object UsedForKnownTypeSerializationObject;
因此,现在生成的代理包含您在datacontract上设置的Knowtypes。 我也有同样的问题,这是我想出的唯一解决办法。 如果您不在DataContract类的类型为Object的属性处, 生成的代理不包含声明的knowtypes

例如:

[DataContract]
[KnownType(typeof(List<String>))]
public class Foo
{
    [DataMember]
    public String FooName { get; set; }

    [DataMember]
    public IDictionary<String, Object> Inputs { get; set; }

    [DataMember]
    private Object UsedForKnownTypeSerializationObject{ get; set; }

}
[DataContract]
[知识类型(类型(列表))]
公开课Foo
{
[数据成员]
公共字符串FooName{get;set;}
[数据成员]
公共IDictionary输入{get;set;}
[数据成员]
私有对象UsedWorkNownTypeSerializationObject{get;set;}
}
它不那么漂亮,因为你最终得到了一个没有任何属性的虚拟属性
功能实现。但我没有其他解决方案。

不幸的是,这似乎也不起作用。但奇怪的是,如果我添加[KnownType(typeof(OptionQuerySingleResult)]并返回IOptionQueryResult列表,而不是字典,它就可以正常工作。不幸的是,这似乎也不起作用。如果我添加[KnownType(typeof(OptionQuerySingleResult)],奇怪的是什么并返回IOptionQueryResult的列表,而不是字典,它工作正常。