2014-09-19 3 views
0

Json.NET (버전 6.0.5)에 문제가있어서 약간 당황 스럽습니다.프로젝트 전체에서 직렬화가 작동하지 않음

[JsonConstructor] 
public MyContainerClass(IEnumerable<AbstractBaseClass> myDerivedUnitClasses) 
{ 
    if (myDerivedUnitClasses == null) 
    { 
     Units = ImmutableHashSet.Create<object>(); 
    } 
    else 
    { 
     Units = myDerivedUnitClasses.ToImmutableHashSet(); 
    } 
} 

public IEnumerable<AbstractBaseClass> Units { get; private set; } 

이 문제없이 직렬화 TypeNameHandling.AutoTypeNameHandling 세트 Json.Convert 사용 : 직렬화되는 얻는다 내 수업의

하나는 다음과 같이 보입니다. 직렬화 된 JSON은 속성에 대한 기대 $type -qualifier을 포함한다 : "System.Collections.Immutable.ImmutableHashSet`1[[AbstractBaseClass, MyLibrary]], System.Collections.Immutable"

내가 데이터 구조를 직렬화 내 솔루션에 하나 개의 프로젝트를 가지고

내가 (자동 형 이름 처리를 사용하여도 직렬화) Json.Convert를 사용하여 직렬화 또 하나. 내가 assembly.GetType(string name)를 호출하고 결과로 null 점점 DefaultSerializationBinder 다시 오류를 추적 Error resolving type specified in JSON System.Collections.Immutable.ImmutableHashSet`1[[AbstractBaseClass, MyLibrary]], System.Collections.Immutable

Json.NET의 소스를 사용하여 다음 역 직렬화이 오류와 함께 실패합니다.

지금까지 그렇게 나빴습니다. 이제는 당황 스럽습니다. 데이터 구조를 직렬화하는 동일한 코드 블록에서 JSON을 deserialize 할 때 모든 것이 완벽하게 작동합니다 (다른 프로젝트에서 사용하는 것과 동일한 코드 사용).

도움 주셔서 감사합니다.

+1

데이터를 비 직렬화하는 프로젝트에 불변의 콜렉션에 대한 참조를 추가하십시오. – Athari

답변

0

하나의 프로젝트에서 AbstractBaseClass을 포함하는 어셈블리에 관한 어셈블리 바인딩 문제가있었습니다. Visual Studio Tools의 fuslogvw.exe을 사용하여 오류를 검사하기 위해 디버깅하는 동안 검색된 디렉터리가 예상 한 것이 아니며 어셈블리 파일을 포함하지 않았 음을 알았습니다.

제 솔루션은 비 직렬화하기 전에 AppDomain.CurrentDomain.AssemblyResolve -event에 가입 한 다음 이벤트 처리기에서 Assembly.LoadFrom을 통해 올바른 경로에서 어셈블리를 수동으로로드하는 것이 었습니다.

관련 문제