0

JavaScriptSerializer() に組み込まれた .Net を使用して、Web ページからの JSON 文字列をシリアル化していました。Newtonsoft.Json.Net の方が優れたシリアライザーがあると聞いたので、試してみようと思いました。

json 文字列をロードします。これがサンプルです。

jsonString = "{\"jName\":\"MB-CEF3-4\",\"StartDate\":\"08/20/2013 00:00\",\"EndDate\":\"08/29/2013 00:00\",\"JType\":\"General\",\"SetupParams\":[
{\"Name\":\"PTitle\",\"Title\":\"01. Period Title\",\"Type\":\"text\",\"Value\":\"TestName\"},
{\"Name\":\"PStart\",\"Title\":\"02. Period Start\",\"Type\":\"datetime\",\"Value\":\"08/20/2013\"},
{\"Name\":\"Target\",\"Title\":\"03. Target\",\"Type\":\"int\",\"Value\":\"1\"},
{\"Name\":\"URL\",\"Title\":\"04. Completion Report URL\",\"Type\":\"url\",\"Value\":\"http://www.example.com\"},
{\"Name\":\"FormTitle\",\"Title\":\"05. Form Title\",\"Type\":\"text\",\"Value\":\"ct\"},
{\"Name\":\"nvTypes\",\"Title\":\"{B6E71787-EB51-45CF-B408-552F79AF2E7B}\",\"Type\":\"nvc\",\"Value\":\"Use of nv tools\"},     {\"Name\":\"NVCoachingTypes\",\"Title\":\"\",\"Type\":\"nvc\",\"Value\":\"\"}]}";

JavaScriptSerializer scs = new JavaScriptSerializer();
        Dictionary<String, Object> aps = (Dictionary<String, Object>)scs.DeserializeObject(ActSetupConfigs);

次に、この Dictionary を別のワーカー クラスに渡し、そこで逆シリアル化します。

私が使用していた: var parameters = ((object[])Parameters["SetupParams"]);

オブジェクトの配列をロードします。

私はJson.Netで同じことをしようとしました

Dictionary<String, Object> aps = JsonConvert.DeserializeObject<Dictionary<String, Object>>(ActSetupConfigs);

しかし、逆シリアル化しようとすると、オブジェクトの配列を取得できません。代わりに、配列のサブコレクションは単なる文字列です....そのため、例外がスローされます。Json.net を使用してすべてのサブコレクションをシリアル化するにはどうすればよいですか?

4

2 に答える 2

0

SetupParams 配列のサブコレクションは文字列ではなく、JTokenJSON.Net が JSON 構造を保持するために使用する汎用コンテナー オブジェクトです。幸いなことに、JToken から値を抽出するのは簡単です。代わりにこのコードを使用してみてください。

JToken aps = JToken.Parse(jsonString);

foreach (JToken param in aps["SetupParams"])
{
    Console.WriteLine("Name:  " + param["Name"].Value<string>());
    Console.WriteLine("Title: " + param["Title"].Value<string>());
    Console.WriteLine("Type:  " + param["Type"].Value<string>());
    Console.WriteLine("Value: " + param["Value"].Value<string>());
    Console.WriteLine();
}
于 2013-08-21T21:59:19.543 に答える
0

上記の json レスポンスは、次のように json.net を使用して解析できます。

dynamic initialresp=JValue.Parse(jsonString);
string jname=Convert.ToString(initialresp.jname);
...
...
dynamic setupparams=JArray.Parse(Convert.ToString(initialresp.SetupParams));
foreach(var item in setupparams)
{
string name=Convert.Tostring(item.Name);
string title=Convert.Tostring(item.Title);
...
...
}

お役に立てれば。

于 2013-08-22T13:33:32.997 に答える