WCF默认序列化程序不使用空值</string,object>序列化Dictionary <string,object>

时间:2015-02-20 17:14:28

标签: c# wcf serialization dictionary

我有通过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不希望使用空值序列化字典值(字典序列化中具有非空值的其他项目正确)

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

1 个答案:

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