2011-09-12 2 views
0

JSON을 Dictionary 및 object []로 serialize 할 수 있다는 것을 알고 있지만 문제는 내가 차라리 더 같은 것을 할 것JSON을 Dictionary <string, dynamic> 및 dynamic []에 직렬화하는 C# .Net 4.0+ 용 JSON 시리얼 라이저가 있습니까?

using System.Web.Script.Serialization; 

var json = new JavaScriptSerializer { }.DeserializeObject(@"{array:['item1','item2']}") as Dictionary<string, object>; 
var strings = new List<string> { }; 
if (json != null) 
{ 
    var array = json["array"] as object[]; 
    if (array != null) 
    { 
     foreach (var item in array.Select(i=>i as string)) 
     { 
      if (!string.IsNullOrWhiteSpace(item)) 
      { 
       strings.Add(item); 
      } 
     } 
    } 
} 
return strings.ToArray(); 

: 지속적으로 사방에 물건을 던져

try 
{ 
    var json = new JavaScriptSerializer { }.DeserializeDynamic(@"{array:['item1','item2']}") as Dictionary<string, dynamic>; 
    var strings = new List<string>{}; 
    foreach (var item in json["array"]) 
     strings.Add(item as string); 
    return strings.ToArray(); 
} 
catch { return null; } 

내가 개체 [] 및 숫자 유형의 문제로 실행 한을, 나는 경우 결코 확실 해요 그것은 int, float, decimal, double 등이 될 것입니다. 나는 json 데이터를 위생 처리 할 수 ​​없기 때문에 신뢰성있게 doubl 만됩니다. e ...

사전 및 동적 []을 출력하는 .Net 4.0 용 JSON 직렬 변환기가 있습니까? 그냥 json으로 작업하기위한 더 자연스러운 선택과 같은 이음새가 있습니다.

답변

1

Dictionary<string, object>Dictionary<string, dynamic>은 먼 런타임과 관련된 유형입니다.

예를 들어이 작동합니다

var dynDic =new Dictionary<string,object>{ {"test", 1}} 
        as Dictionary<string,dynamic>; 
int value = dynDic["test"]; 

그래서 만약 귀하의 첫 번째 작품 :

var json = new JavaScriptSerializer { } 
     .DeserializeObject(@"{array:['item1','item2']}") 
     as Dictionary<string, object>; 

다음 그렇게해야 : 다음

var json = new JavaScriptSerializer { } 
     .DeserializeDynamic(@"{array:['item1','item2']}") 
     as Dictionary<string, dynamic>; 

그러나 :

foreach (var item in json["array"]) 
    strings.Add(item as string); 

은 동적 호출을 사용하지 않으므로 varobject 또는 dynamic인지 여부를 컴파일하므로 문제가있는 경우 dynamic을 사용하고 있습니다. 당신은 당신이 얼마나 그 배열에서 object의를 사용하는 컴파일러를 말하고있다 시전 할 때

같은 규칙은 object[]dynamic[]에, 그들이 자유롭게 그들 사이에 캐스트 할 수있는 동일한 유형에 적용됩니다.

dynamic[] dynArr = new object[]{1}; 

그래서 대답은 Dictionary<string,object> 또는 object[]에 직렬화합니다 아무것도 Dictionary<string,dynamic> 또는 dynamic[]

로 사용할 수 있다는 것입니다
관련 문제