2013-02-20 63 views
1

可能使用JavaScriptSerializer仅仅是JSON的一个片段Deserialize?我不需要来自JSON的所有数据,只是一个部分。使用JavaScriptSerializer反序列化JSON片段ASP.NET

的JSON数据是这样的:

// **** snip **** 
{ 
    "response": { 
     some data 
    } 
}, 
"forecast": { 
    "txt_forecast": { 
    "date": "7:00 AM PST", 
    "forecastday": [ // <-- section needed 
     { 
      some data.... 
     }, 
     ......... 
     { 
      some data.... 
     } 
    ] 
}, 
"simpleforecast": { 
    "forecastday": [ 
     more data 
    ] 
} 
// **** snip **** 

这是我需要解析部分:

"forecastday": [ // <-- section needed 
    { 
     some data.... 
    }, 
    ......... 
    { 
     some data.... 
    } 
] 

我试着用forecast对象(整个数据的片段),但它返回null。

var jsonData = new WebClient().DownloadString(url); 
JavaScriptSerializer ser = new JavaScriptSerializer(); 
forecast_class forecast = ser.Deserialize<forecast_class>(jsonData); 
+0

你确定的JSON是有效的,如果你需要验证JSON是合法使用这个链接[JSONLint(HTTP:// jsonlint。 com /) – MethodMan 2013-02-20 20:24:03

+0

由于您不想构建* whole *对象,您很可能必须解析字符串才能获取所需的部分。一旦你有了这个部分,'反序列化'成一个对象。 'JavaScriptSerializer'不包含任何方法来解析一个特定的部分。 – Jesse 2013-02-20 20:24:33

+0

@DJKRAZE JSON是有效的,它是weatherunderground api。 – skomi 2013-02-20 20:27:23

回答

2

威尔这样的事情对你的工作

var dictObj = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonData); 
var jsonNew = new JavaScriptSerializer().Serialize(dictObj["forcast"]); 
+0

它的工作原理。我刚刚为三个“级别”(预测 - > txt_forecast - > forecastday)实施了这个片段三次。这会减慢我的应用程序? – skomi 2013-02-20 22:07:52

+1

这是你必须测试的东西.. JSON是非常轻的重量,不应该增加额外的额外开销在减速方面它应该加快它实际上在我看来......很高兴我可以为您提供快速工作解.. – MethodMan 2013-02-20 22:12:15

相关问题