我有通过WCF从服务器检索数据的应用程序(servicecontract接口,dataContracts等)
我有对象PackedObject
:
public class PackedObject
{
[DataMember]
private String _objTypeName;
[DataMember]
private Guid _id;
[DataMember]
private Dictionary<string, object> _fields = new Dictionary<string,object>();
...
}
我从DataRow填充_fields
字典为(列名称) - &gt; (该栏中的值)
DataRow中的某些单元格可以为null。
字典中所有非空值的对象正确序列化和反序列化。但是如果value为null,则服务只是停止序列化而没有任何错误。
它不会停止工作:我的应用程序仍在尝试重复请求服务,我看到有关此服务中的新请求的新日志信息。
似乎DataContractSerializer
不希望使用空值序列化字典值(字典序列化中具有非空值的其他项目正确)
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
添加到DataContract类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;
}
}