Newtonsoft JSON 역 직렬화


83

내 JSON은 다음과 같습니다.

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

C # 용 Newtonsoft JSON.NET deserialize 라이브러리를 찾았습니다. 다음과 같이 사용하려고했습니다.

object JsonDe = JsonConvert.DeserializeObject(Json); 

JsonDe모든 "유형"데이터를 얻기 위해 개체에 액세스하려면 어떻게 해야합니까? 루프로 시도했지만 개체에 열거자가 없기 때문에 작동하지 않습니다.



:이 질문에 대한 답을 살펴해야 stackoverflow.com/questions/11126242/...
디 에츠

답변:


133

JSON에있는 필드를 보유하는 클래스를 구현할 수 있습니다.

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

그런 다음 DeserializeObject의 일반 버전을 사용합니다.

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

문서 : JSON 직렬화 및 역 직렬화


유용한 예를 방금 추가했습니다. "유형"이 목록 (배열 배열) 목록 인 이유는 나에게 미스테리입니다. 그러나 이것은 여러분이 준 json 문자열과 일치해야합니다.
Michael Banzon 2013 년

1
답변 해 주셔서 감사합니다. 그것은 내 문제 : 해결하기 위해 나를 도와
산토 쉬 쿠마 patro

나는 실패한 캐스트를 사용하고 있었다 MyData tmp = (MyData)JsonConvert.DeserializeObject(json);. deserialize의 일반 버전은 훨씬 더 잘 작동합니다. :-)
SharpC

좋아, 난 여기가 쓰기 : dotnet add package Newtonsoft.Jsonusing Newtonsoft.Json;.
dani herrera

83

훨씬 더 쉬운 솔루션 : 동적 유형 사용

Json.NET 4.0 릴리스 1부터는 기본 동적 지원이 있습니다. 클래스를 선언 할 필요가 없으며 dynamic다음을 사용하십시오 .

dynamic jsonDe = JsonConvert.DeserializeObject(json);

모든 필드를 사용할 수 있습니다.

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

동적 을 사용하면 데이터를 보관하기 위해 특정 클래스를 만들 필요가 없습니다.


10
좋은 대답에 나를 소개 주셔서 감사합니다 dynamic:)
maialithar

2
확실히 쉽습니다. 그러나 속성이 존재하는지 쉽게 확인할 수 없다는 단점이 있습니다 (예외 처리를 사용해야 함).
Jowen

2
살펴 속성이 예외 처리를하지 않고있는 경우 확인하려면이 @Jowen 그 답
이브 M.

대단히 감사합니다 1 !! 간단한 해결책 필자는 오랫동안 찾고
Sly_TheKing

10

당으로 Newtonsoft 문서 당신은 또한이 같은 익명의 객체 직렬화 수 :

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James

이제 똑똑합니다! ;-) 그러나 정의가 귀하의 예만큼 간단하지 않을 때 서투 릅니다.
Sнаđошƒаӽ

에 대해 아무것도 모릅니다 .이 경우 definition어떻게 사용해야 DeserializeAnonymousType합니까?
Mehdi Dehghani

대부분의 JSON이 그렇게 단순하지 않기 때문에 이것은 쓸모없는 예입니다. 중첩 된 속성이있는 JSON 문자열과 더 유사한 정의를보고 싶습니다.
pmfith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.