WCF 默认序列化程序不使用空值序列化 Dictionary<string,object>
WCF default serializer do not serialize Dictionary<string,object> with null values
我有一个应用程序可以通过 WCF(服务合同接口、数据合同等)从服务器检索数据
我有对象 PackedObject
:
public class PackedObject
{
[DataMember]
private String _objTypeName;
[DataMember]
private Guid _id;
[DataMember]
private Dictionary<string, object> _fields = new Dictionary<string,object>();
...
}
我将 DataRow 中的 _fields
字典填充为(列名)-->(该列中的值)
DataRow 中的某些单元格可以为空。
字典中所有非空值的对象正确序列化和反序列化。但是,如果值为 null,则服务会停止序列化而不会出现任何错误。
它不会停止工作:我的应用程序仍在尝试重复请求服务,并且我看到了有关此新服务请求的新日志信息。
似乎 DataContractSerializer
不想用空值序列化字典值(字典中具有非空值的其他项目正确序列化)
我应该怎么做才能解决这个问题?
添加到 DataContract-class DataMember 属性。然后将 KnownType 属性用于对象的预期类型。在以下示例中,我在集合中使用了 int 或 bool :
[DataContract]
[KnownType(typeof(int[]))]
[KnownType(typeof(bool[]))]
public class CompositeType
{
[DataMember]
public object UsedForKnownTypeSerializationObject;
[DataMember]
public string StringValue
{
get;
set;
}
[DataMember]
public Dictionary<string, object> Parameters
{
get;
set;
}
}
我有一个应用程序可以通过 WCF(服务合同接口、数据合同等)从服务器检索数据
我有对象 PackedObject
:
public class PackedObject
{
[DataMember]
private String _objTypeName;
[DataMember]
private Guid _id;
[DataMember]
private Dictionary<string, object> _fields = new Dictionary<string,object>();
...
}
我将 DataRow 中的 _fields
字典填充为(列名)-->(该列中的值)
DataRow 中的某些单元格可以为空。
字典中所有非空值的对象正确序列化和反序列化。但是,如果值为 null,则服务会停止序列化而不会出现任何错误。
它不会停止工作:我的应用程序仍在尝试重复请求服务,并且我看到了有关此新服务请求的新日志信息。
似乎 DataContractSerializer
不想用空值序列化字典值(字典中具有非空值的其他项目正确序列化)
我应该怎么做才能解决这个问题?
添加到 DataContract-class DataMember 属性。然后将 KnownType 属性用于对象的预期类型。在以下示例中,我在集合中使用了 int 或 bool :
[DataContract]
[KnownType(typeof(int[]))]
[KnownType(typeof(bool[]))]
public class CompositeType
{
[DataMember]
public object UsedForKnownTypeSerializationObject;
[DataMember]
public string StringValue
{
get;
set;
}
[DataMember]
public Dictionary<string, object> Parameters
{
get;
set;
}
}