Json 反序列化问题与 EF 和 RIA 服务

本文关键字:RIA 服务 EF 反序列化 问题 Json | 更新日期: 2023-09-27 18:37:07

我有一个奇怪的问题。我将 WCF RIA 与实体框架一起使用。我已经实现了一个通用搜索功能,它依赖于将生成的实体作为byte[]发送回(输入 Json.Net),并且我能够绕过RIA强类型性的各种限制。但是当我在客户端中反序列化时,我的对象没有正确组装。 现在我这是什么意思?

从技术上讲,json 是一个字符串,由我转换为byte[]并返回到客户端,包含我需要的相关实体信息。因此,假设该实体称为 Account,并且它有一个相关的 Person 对象。json 字符串,甚至是反序列化的 jobject,都有这个 Person 对象及其详细信息。但是,当我像JsonConvert.DeserializeObject<Account>(jdata, settings)一样反序列化时 - Person 为空,没有错误。

我正在尝试的设置在这里:

settings = new JsonSerializerSettings()
{
    //CheckAdditionalContent = true,
    PreserveReferencesHandling = PreserveReferencesHandling.All,
    //ReferenceLoopHandling = ReferenceLoopHandling.Serialize
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.Ignore,
    ObjectCreationHandling = ObjectCreationHandling.Replace,
    TypeNameHandling = TypeNameHandling.Auto 
}; 

有什么想法吗?

Json 反序列化问题与 EF 和 RIA 服务

好的,想通了 - 所以在反序列化之前,我将以下解析器附加到我的设置中,例如settings.ContractResolver = new DynamicContractResolver();

    public class DynamicContractResolver : DefaultContractResolver
    {
        protected override JsonProperty CreateProperty(System.Reflection.MemberInfo member, MemberSerialization memberSerialization)
        {
            var r = base.CreateProperty(member, memberSerialization);
            r.Ignored = false;
            return r;
        }
    }

现在,Json 中的所有内容都将完全反序列化到对象中。我不知道为什么这不是默认行为。