C# 字典KnownType的WCF问题
我有一个实现以下DataMember的服务: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]
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的列表,而不是字典,它工作正常。