我有通过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
字典填充为(列名)-->(列中的值)
DataRow中的某些单元格可以为空。字典中具有所有非空值的对象将正确地序列化和反序列化。但如果值为null,则服务只需停止序列化而不会出现任何错误。它并没有停止工作:我的应用程序仍然试图将请求重复到service,而我在service中看到了关于这个新请求的新日志信息。DataContractSerializer
似乎不想序列化带有Null的字典值(字典中具有非Null值的其他项正确序列化)
我该怎么做才能解决这个问题?
添加到DataContract-class DataMember属性。然后对Object使用的预期类型使用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;
}
}