익명 객체에 JSON 직렬화 해제
C#에서는, 이러한 코드를 사용해 익명의 오브젝트를 JSON에 시리얼 하는데 성공했습니다.
var obj = new { Amount = 108, Message = "Hello" };
JavaScriptSerializer serializer = new JavaScriptSerializer();
String output = serializer.Serialize(obj);
다만, 나중에 할 수 있는 것은, JSON 문자열을 어나니머스 오브젝트로 역직렬화하는 것입니다.이런 거...
var obj2 = serializer.Deserialize(output, object);
하지만 연재기는요deserialize() 메서드를 사용하려면 역직렬화하는 오브젝트 유형인 두 번째 파라미터가 필요합니다.
이거 해봤는데...
var obj2 = serializer.Deserialize(output, obj.GetType());
그러나 이로 인해 다음과 같은 오류가 발생합니다.
<>f__Anonymous 유형에 대해 정의된 매개 변수 없는 생성자가 없습니다.Type 0'2 [ System 。Int32, mscorlib, 버전=4.0.0, Culture=중립, 공개키토큰=b77a5c561934e089],[시스템]문자열, mscorlib, 버전=4.0.0, Culture=중립, 공개키토큰=b77a5c561934e089]'
나는 이 오류가 무슨 뜻인지 모르겠다.
다이내믹스는 어떨까요?제가 보기에는 가장 빠른 방법은 다음과 같습니다.
dynamic myObject = JsonConvert.DeserializeObject<dynamic>(output);
decimal Amount = Convert.ToDecimal(myObject.Amount);
string Message = myObject.Message;
주의: Newtonsoft.json.dll 참조가 필요합니다.
JSON.Net은 에서 JSON과 함께 사용할 수 있는 강력한 라이브러리입니다.그물
업데이트: Json.ASP에 Net이 추가되었습니다.넷, 하지만 최근에 가장 좋아하는 것은 JsonFX입니다.linq 지원도 훌륭합니다. 확인해 보세요.
업데이트 2: JsonFX에서 이전하여 현재 ServiceStack을 사용하고 있습니다.문자, 빨라!
DiserializeObject 메서드를 사용하면 특정 유형이 필요하지 않습니다.이것은 또한 유사한 SO 문제를 해결했다.이 메서드는 A로 역직렬화됩니다.Dictionary<string, object>
이름/값 쌍을 포함합니다.
업데이트: 이 작업을 수행할 때 발생하는 오류를 명확히 하기 위해:
var obj2 = serializer.Deserialize(output, obj.GetType());
의 종류에 따라obj
,Deserialize
는 기본 생성자를 사용하여 유형의 새 인스턴스를 생성하려고 합니다.C#의 어나니머스 타입에는 퍼블릭파라미터리스 컨스트럭터가 없기 때문에 조작은 실패합니다.
이는 다음과 같이 내장된 JavaScript Serializer를 사용하여 수행할 수도 있습니다.
object result = new JavaScriptSerializer().DeserializeObject(JSONData);
키와 값의 쌍을 가진 개체 [] 인스턴스가 반환됩니다.
최근에는 멋진 JsonFx를 사용하고 있습니다.Net Library와 저는 그 기능을 높이 평가하게 되었습니다.Nuget Package Manager를 사용하여 Visual Studio 내에 직접 설치할 수 있습니다.
코드는 이렇습니다.
var reader = new JsonReader();
string input = @"{ ""first"": ""Foo"", ""last"": ""Bar"" }";
var template = new { first=String.Empty, middle=String.Empty, last=String.Empty };
var output = reader.Read(input, template);
보시다시피 익명 유형에 대한 템플리트도 지정할 수 있습니다.
뉴턴소프트를 사용한다면.역직렬화를 시도해 볼 수 있습니다.익명유형법
var obj1 = new { Amount = 108, Message = "Hello" };
var json=JsonConvert.SerializeObject(obj1);
// or as well
var json= "{ \"Amount\" : 108, \"Message\" : \"Hello\" }";
//Deserialization
var definition = new { Amount = 0, Message = "" };
//obj2 type is "anonymous"
var obj2 = JsonConvert.DeserializeAnonymousType(json,definition);
결과
{ Amount = 108, Message = "Hello" }
수동으로 입력하지 않을 경우 가장 쉬운 방법은 다음과 같습니다.
var jsonString = JsonHelper.SerializeObject(item);
ExpandoObject obj = JsonHelper.DeserializeObject<ExpandoObject>(jsonString);
대신 JObject를 사용하여 JSON 문자열을 역직렬화할 수 있습니다.
using Newtonsoft.Json.Linq;
string output = "{\"Amount\" = 108, \"Message\" = \"Hello\"}";
var amount = JObject.Parse(output)["Amount"];
언급URL : https://stackoverflow.com/questions/6904825/deserialize-json-to-anonymous-object
'programing' 카테고리의 다른 글
Angular에서 $resource 서비스 오류를 처리하는 방법JS (0) | 2023.02.11 |
---|---|
Angular ng-repeat에서의 orderBy 배열 항목 값 (0) | 2023.02.11 |
IIS 7 php-cgi의 WordPress를 통한 CPU 사용 (0) | 2023.02.11 |
입력하는 동안 ReactJs가 변경 시 지연 (0) | 2023.02.11 |
XMLHttpRequest 액세스가 Angular로 거부됨10 미만의 IE 버전에서는 JS (0) | 2023.02.11 |