2011-09-12 35 views
0

JSONをDictionaryおよびobject []にシリアライズできることはわかっていますが、私はむしろより多くのようなものだろう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; } 

私は、オブジェクト[]と数種の問題に実行しているが、私は、もしわかりませんよんそれは整数、浮動小数点数、小数点、または倍数などになるだろう。私はjsonデータを浄化することができないので、信頼性の高い二倍に過ぎない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[]dynamic[]に適用され、彼らは同じ型で、あなたはちょうどその配列からobject Sを使用する方法コンパイラを言っているキャストすると、あなたは自由に、それらの間にキャストすることができます。

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

だから、答えはDictionary<string,object>またはobject[]にデシリアライズされます何がDictionary<string,dynamic>またはdynamic[]

として使用することができるということです
関連する問題