我有一个奇怪的问题。我将 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
};
有什么想法吗?
好的,想通了 - 所以在反序列化之前,我将以下解析器附加到我的设置中,例如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 中的所有内容都将完全反序列化到对象中。我不知道为什么这不是默认行为。