【发布时间】:2015-01-21 08:00:19
【问题描述】:
我在 C# 中有一个过滤器对象,其中包含一个字符串字典(表示属性名称)和相应的值(期望一个对象)。
在将带有 JSON 的自定义类型的对象发送到 WCF 时,我在我的 JSON 中使用 __type 将 JSON 对象正确反序列化为 C# 对象。但是,当发送一个枚举(在 JSON 中表示为整数)时,它将在 C# 中序列化为整数,因为反序列化器无法告诉它所期望的枚举类型。
我发送的 JSON:
{
"filterList": [
{ "FilterProperty": "Status", "FilterValue": 4 }
{ "FilterProperty": "Status", "FilterValue": 6 }
]
}
它将 DataContract 反序列化为以下列表:
public class Filter
{
[DataMember]
public string FilterProperty { get; set; }
[DataMember]
public object FilterValue { get; set; }
}
FilterValue 在这种特定情况下对应于枚举。但是因为FilterValue属性被定义为对象,所以反序列化器不知道如何在没有额外信息的情况下对其进行反序列化。
是否可以使用 JSON 发送附加信息以让 WCF 正确反序列化枚举,即使需要一个对象?
或者解决这个问题的唯一方法是使用反射从过滤器属性名称中解析类型?
【问题讨论】:
-
您在 WCF 服务中使用 DataContracts 吗?如果你只使用字典,很明显序列化器将找不到正确的枚举类型。
-
@rraszewski 我使用 DataContracts,它不是本机字典。 '如果你只使用字典,很明显序列化程序将找不到正确的枚举类型',你到底是什么意思?
-
@Amit 我不想将我的枚举作为字符串发送到线上,这不是问题所在。问题是我将枚举作为整数发送到我的 WCF 服务器,并且我希望它正确反序列化它。但是,服务器不能隐式执行此操作,因为它需要一个对象而不是特定的 Enum 类型。
-
请用代码示例注释您的问题,以展示您的问题。诸如 Is it possible to send additional information with JSON to let WCF 正确反序列化枚举,即使需要一个对象之类的句子本身并没有多大意义。