2012-06-13 3 views
1

이상한 문제가 있습니다. Entity Framework에서 WCF RIA를 사용합니다. 결과 엔티티를 byte[] (Json.Net 입력)으로 다시 보내는 것에 의존하는 일반 검색 기능을 구현했으며 RIA의 강력한 유형성의 모든 종류의 한계를 극복 할 수있었습니다. 그러나 클라이언트에서 다시 deserialize 할 때 객체가 제대로 어셈블되지 않습니다. 이제 그게 무슨 뜻일까요?Json EF 및 RIA 서비스와 관련된 문제를 deserialize

기술적으로 문자열 인 json은 클라이언트에서 byte[]으로 변환되어 다시 필요한 관련 엔티티 정보를 포함합니다. 그래서 엔티티의 이름이 Account이고 관련 Person 객체가 있다고 가정 해 봅시다. json 문자열에는 심지어 deserialize 된 jobject도이 Person 객체와 세부 정보가 있습니다. 그러나, 같은 deserialize JsonConvert.DeserializeObject<Account>(jdata, settings) - 사람이 오류없이 null입니다. 내가 노력하고있어

설정은 여기에 있습니다 :

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

어떤 아이디어? 좋아

답변

2

는 그것을 알아 냈다 - 그래서 역 직렬화하기 전에 지금 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으로에서의 모든 것을 내 설정 아래의 해결을 부착. 이것이 왜 디폴트 동작이 아닌지 나는 모른다.