2

私が持っているのはこれです:

string json = @"{'number': 3, 'object' : { 't' : 3, 'whatever' : 'hi', 'str': 'test'}";

'object'に到達するまでフィールドを読み取り、'object'全体を.NETタイプにシリアル化してから、解析を続行するにはどうすればよいですか?

4

3 に答える 3

1

タイプを定義します。

public class Object
{
    public int t { get; set; }
    public string whatever { get; set; }
    public string str { get; set; }
}

public class RootObject
{
    public int number { get; set; }
    public Object object { get; set; }
}

次に、それを逆シリアル化します。

string json = @"{'number': 3, 'object' : { 't' : 3, 'whatever' : 'hi', 'str': 'test'}";
var deserialized = JsonConvert.DeserializeObject<RootObject>(json);
//do what you want

アップデート

あなたはそれが動的であるとは言いませんでした、そのような構文解析には多くの解決策があります。

以下を確認してください。

動的JSON解析にJSON.NETを使用する

C#4.0と動的を使用してJSONを解析する

JSONをC#動的オブジェクトに逆シリアル化しますか?

動的変数を使用してJSONブロックを解析する

JSONをExpandoObjectに変換する

動的型を処理するには:を使用して、 XMLJSONdynamicなどの動的データを処理します。ExpandoObject

更新2

匿名型を使用してJSONデータを逆シリアル化する

更新3

これはあなたのために働きますか?

 string json = "{\"number\": 3, \"object\" : { \"t\" : 3, \"whatever\" : \"hi\", \"str\": \"test\"}}";
            var deserialized = SimpleJson.DeserializeObject<IDictionary<string, object>>(json);

            var yourObject = deserialized["object"] as IDictionary<string, object>;            
            if (yourObject != null)
            {
                var tValue = yourObject.GetValue("t");
                var whateverValue = yourObject.GetValue("whatever");
                var strValue = yourObject.GetValue("str");
            } 

 public static object GetValue(this IDictionary<string,object> yourObject, string propertyName)
        {
            return yourObject.FirstOrDefault(p => p.Key == propertyName).Value;
        }

最終結果:

ここに画像の説明を入力してください

または、次のように変更します

if (yourObject != null)
            {
                foreach (string key in yourObject.Keys)
                {
                    var myValue = yourObject.GetValue(key);
                }
            } 

ここに画像の説明を入力してください

アップデート4-サービススタック

string json = "{\"number\": 3, \"object\" : { \"t\" : 3, \"whatever\" : \"hi\", \"str\": \"test\"}}";
            var deserialized = JsonObject.Parse(json);

            var yourObject = deserialized.Get<IDictionary<string, object>>("object");

            if (yourObject != null)
            {
                foreach (string key in yourObject.Keys)
                {
                    var myValue = yourObject.GetValue(key);
                }
            }

結果:

ここに画像の説明を入力してください

于 2013-03-27T09:29:03.123 に答える
1

ServiceStackの動的JSON解析を見てください:

var myPoco = JsonObject.Parse(json)
    .GetUnescpaed("object")
    .FromJson<TMyPoco>();
于 2013-03-27T14:45:03.687 に答える
0

これは逆シリアル化で機能します。シリアル化が完了したら更新します。

foreach(KeyValuePair<String,String> entry in JsonObject.Parse(json))
{

}

編集:これはjsonオブジェクトに対してのみ機能するようです。JsonArrayObjectsを反復処理する方法がまだわかりません

于 2013-03-27T10:05:51.160 に答える