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;
    }
}