提问者:小点点

WCF默认序列化程序不序列化具有空值的字典<string,object>


我有通过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值的其他项正确序列化)

我该怎么做才能解决这个问题?


共1个答案

匿名用户

添加到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;
    }
}

相关问题