'System.Web.Helpers.Json..cctor ()'메서드가 'System.Web.Helpers.Json.CreateSerializer ()'메서드에 액세스하려는 시도가 실패했습니다.
NET 4에서 System.Web.Helpers.Json
일부 JSON을 deserialize 하는 데 사용 하고 있습니다 dynamic
. 다음 줄은이 오류로 실패합니다.TypeInitializationException: Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed.
var json = Json.Decode(response);
은 response
긴하지만 유효 JSON이다. 여기서 문제가 무엇일까요? 짧은 손수 JSON으로 LINQPad를 사용해 보았고 작동했습니다. 이것은 일종의 구성 문제입니까?
[편집하다]
다음은 실제 샘플 JSON입니다. 내용이 거의 관련이없는 것 같습니다. 새로운 콘솔 응용 프로그램 또는 LINQPad에서 실행되면 예상대로 작동합니다. 그러나 새로운 Windows Forms 응용 프로그램에서 동일한 코드를 실행하려고하면 위의 오류가 표시됩니다.
var json = Json.Decode("{\"r\":{\"0\":{\"id\":\"2\"},\"1\":{\"id\":\"33\"}}}");
[편집 2]
실제로 이것은 프로젝트 유형과 관련이 없음이 밝혀졌습니다. 프로젝트가 디버깅되는 경우 예외가 발생합니다. 단순히 실행하면 예외가 발생하지 않습니다. 이상하지?
나는이 질문을 잊고 그 동안 내 대답을 찾았습니다. Microsoft의 Connect 사이트 어딘가에 있다고 생각하지만 확실하지 않습니다. 이제 공유합시다.
기본적으로이 문제를 해결하려면 디버그 아래의 프로젝트 설정에서 "Visual Studio 호스팅 프로세스 사용"이 선택 취소 되어 있는지 확인해야합니다 . 왜 이런 일이 발생하는지 잘 모르겠지만 이것은 확실히 "고정"하는 방법입니다. 나는 이것에 대해 알게되자 답변 검색을 중단했습니다. 나에게는 충분했습니다.
부분 신뢰에서 실행중인 경우에도 발생할 수 있습니다. 가능한 이유는 여기 에서 예외 설명을 확인하십시오 .
웹 컨텍스트에서 실행되지 않기 때문에 이것이 적용되는지 모르겠지만 링크가 설명하는 내용은 다음과 같습니다.
이 예외는 다음과 같은 상황에서 발생합니다.
리플렉션을 사용하여 부분적으로 신뢰할 수있는 코드에서 일반 컴파일 된 코드에서 액세스 할 수없는 개인, 보호 또는 내부 메서드에 액세스합니다.
투명 코드에서 보안에 중요한 방법에 액세스합니다.
클래스 라이브러리에있는 메서드의 액세스 수준이 변경되었으며 라이브러리를 참조하는 하나 이상의 어셈블리가 다시 컴파일되지 않았습니다.
붙박이 json 클래스에 문제가 있습니다.
다른 방법으로이를 수행하려면 아래 코드를 사용하십시오.
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new DynamicJavaScriptConverter[] { new DynamicJavaScriptConverter() });
var result = WrapObject(serializer.DeserializeObject(value)); // here you will have result.
private object WrapObject(object value)
{
IDictionary<string, object> values = value as IDictionary<string, object>;
if (values != null)
{
return new DynamicJsonObject(values);
}
object[] arrayValues = value as object[];
if (arrayValues != null)
{
return new DynamicJsonArray(arrayValues);
}
return value;
}
Roland의 답변에 더하여 나열된 일부 어셈블리 불일치는 AssemblyInfo.cs 파일에서 수정할 수 있습니다.
내 AssemblyInfo의 문제가되는 줄은 다음과 같습니다.
[assembly: AllowPartiallyTrustedCallers]
이를 제거하면이 어셈블리를 동적으로로드 한 다른 어셈블리에서 설정하려고했던 공용 클래스의 공용 속성에 액세스 할 수있었습니다.
'Programing' 카테고리의 다른 글
EditText에서 Enter 키를 방지하지만 텍스트는 여러 줄로 표시됩니다. (0) | 2020.11.20 |
---|---|
Groovy 스크립트에 전달 된 인수를 캡처하는 방법은 무엇입니까? (0) | 2020.11.20 |
조각에서 권한을 확인하는 방법 (0) | 2020.11.19 |
자바 스크립트 : 케이스 전환에서 조건 사용 (0) | 2020.11.19 |
업로드 이미지 크기를 줄이기 위해 UIImage의 크기를 조정하는 방법 (0) | 2020.11.19 |