2017-09-18 28 views
0

我是新的C#和用循环geting对象键和值stucked,我甚至不能创建适当的工作循环,通过对象记录。获取嵌入式对象的键和值

即该数据对象经历多种功能和最后经过限定对象

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密钥(用户名,密码)和Value(Username.text,Password.text),均为字符串也要注意对象不总是会包含相同的数据,基本上我只是简单地使用对象内的数据进行操作。

或者也许有其他更好/正确的方法来做到这一点?

请指教。

+1

这听起来像你想创建一个键/值映射,在这种情况下,匿名对象可能不是您要查找的内容。也许你应该使用'StringDictionary'或'Dictionary '? –

回答

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