私はこの文字列を持っています:
[{ "processLevel" : "1" , "segments" : [{ "min" : "0", "max" : "600" }] }]
私はオブジェクトをデシリアライズしています:
object json = jsonSerializer.DeserializeObject(jsonString);
オブジェクトは次のようになります。
object[0] = Key: "processLevel", Value: "1"
object[1] = Key: "segments", Value: ...
そして、辞書を作成しようとしています:
Dictionary<string, object> dic = json as Dictionary<string, object>;
しかし、dic
はnull
を取得します。
問題は何ですか?
Nullになる理由については、mridulaの答えをご覧ください。ただし、json文字列を辞書に直接変換する場合は、次のコードスニペットを試すことができます。
Dictionary<string, object> values =
JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
as
キーワードの MSDNドキュメント は、ステートメント_expression as type
_がステートメントexpression is type ? (type)expression : (type)null
と同等であることを示しています。 json.GetType()
を実行すると、_System.Object[]
_ではなく_System.Collections.Generic.Dictionary
_が返されます。
Jsonオブジェクトをデシリアライズするオブジェクトのタイプが複雑なこれらのような場合、Json.NETのようなAPIを使用します。独自のデシリアライザを次のように記述できます。
_class DictionaryConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
Throw(new NotImplementedException());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Your code to deserialize the json into a dictionary object.
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Throw(new NotImplementedException());
}
}
_
そして、このシリアライザーを使用してjsonを辞書オブジェクトに読み込むことができます。 例 です。
私はこの方法が好きです:
using Newtonsoft.Json.Linq;
//jsonString is your JSON-formatted string
JObject jsonObj = JObject.Parse(jsonString);
Dictionary<string, string> dictObj = jsonObj.ToObject<Dictionary<string, object>>();
dictObj
を辞書として使用して、必要なものにアクセスできるようになりました。値を文字列として取得する場合は、Dictionary<string, string>
を使用することもできます。