2017-09-18 1 views
0

私はC#で新しく、getingオブジェクトのキーと値をループに詰め込んで、オブジェクトレコードを通過する適切な作業ループを作成することさえできません。最終的には、複数の機能とを通過するそのデータオブジェクトがこの機能に来た後、オブジェクトインラインオブジェクトキーと値の取得

void Auth() 
{ 
    var data = new { 
     username = Username.text, 
     password = Password.text 
    }; 

    networkManager.SendData("LOGIN", data); 
} 

を定義

主な機能。

public string format(object nObject) 
    { 
     foreach (var row in nObject) { 
      Debug.Log(row.Key); 
     } 
    } 

主な機能の外にそれを介して単純なオブジェクトとループを作成し、キーをretriveする方法は(ユーザー名、パスワード)とバリュー(Username.text、Password.text)があり、両方の文字列もないオブジェクトの通知をしたいと常に同じデータを含みますが、基本的にはオブジェクト内のデータを操作するだけです。

これを行うには、他のいくつかのより良い/正しい方法がありますか?

お知らせください。

+1

を使用キー/値マップ。その場合、匿名オブジェクトはおそらくあなたが探しているものではありません。おそらく 'StringDictionary'や' Dictionary 'を使うべきでしょうか? –

答えて

2

私が正しくあなたを理解していれば、あなたはすべてのペアのフィールドを経由して列挙したいとそれは価値がある。 匿名型を渡すので、2つのオプションがあります:リフレクション経由とJSON経由のオブジェクト逆シリアル化経由。 最初のアプローチ:あなたは、複雑な値の型を使用するように滑走している場合

public void format(object nObject) 
{ 
    foreach (var row in nObject.GetType().GetProperties()) 
    { 
     Debug.Log($"Key{row.Name}={row.GetValue(nObject)}"); 
    } 
} 

第二のアプローチが良いです:

ここ
public void format(object nObject) 
{ 
    var obj = JObject.FromObject(nObject); 
    foreach (var row in obj) 
    { 
     var key = row.Key; 
     string value; 
     switch (row.Value.Type) 
     { 
      case JTokenType.Array: 
       value = ((JArray) row.Value).Count.ToString(); 
       break; 
      case JTokenType.Boolean: 
       value = ((Boolean)row.Value)? "Да" : "Нет"; 
       break; 
      default: 
       value = row.Value.ToString(); 
       break; 
     } 

     Debug.Log($"Key{key}={value}"); 
    } 
} 

私はあなたが作成しようとしているようですねJson.NET

+0

ありがとう、Json.NETは私のために良いです。 – feesar

1

あなたはforeachのと辞書、およびループを使用する必要があります

foreach(KeyValuePair<string, string> entry in myDic) 
{ 
    // do something with entry.Value or entry.Key 
} 

あなたがMSのドキュメントをご覧くださいhere