递归打印Hashtable的键和值,包括HashTables和ArrayLists

时间:2013-07-09 16:26:26

标签: c# json arraylist hashtable

这可能是愚蠢/过于复杂/几乎不可能,但......

我有一个JSON文件。我使用C#类(http://bit.ly/1bl73Ji)将文件解析为HashTable。

所以,我现在有一个HashTable。此HashTable具有键和值。但是,其中一些值是ArrayLists或HashTables。有时这些ArrayLists包含HashTables,有时HashTables包含Hashtables,依此类推......等等...

我基本上只是尝试将这些键和值打印到文件中,只需使用简单的缩进来区分,例如。

dateLastActivity
    2013-07-01T13:50:51.746Z
members
    memberType
        normal
    avatarHash
        5f9a6a60b6e669e81ed3a886ae
    confirmed
        True
    status
        active
    url
        www.awebsite.com
    id
        4fcde962a1b057c46607c1
    initials
        AP
    username
        ap
    fullName
        A Person
    bio
        Software developer

我需要recursivley遍历Hashtable,检查值是否为ArrayList或HashTable,并继续检查和检查,直到它只是一个字符串值。我对此有所了解,但我似乎无法绕过递归过程。

有人可以帮忙吗?即使有人能想出更好的方式,或者我应该放弃希望,我也希望听到它!

提前致谢!

2 个答案:

答案 0 :(得分:1)

有一个库

老实说,我只会使用Json.NET,这就是我在几乎所有项目中用来处理我的Json的东西,它保持最新并且运行得非常好。

如果您想要一个易于人类阅读的文件格式,序列化(序列化意味着转换为数据表示)您的数据并在以后进行人工编辑,这也是一件好事。它具有开箱即用的几乎所有对象的序列化功能。

对于大多数对象,您只需将此语句序列化为字符串即可。


 string s = JsonConverter.Serialize(theObject);
 //assume you have a write file method
 WriteFile(filename, s);

在大多数情况下进行序列化并反序列化同样容易


string content = ReadFile(filename);
MyObject obj = JsonConverter.Deserialize(content);

该库还包括对匿名对象的支持,允许您指定如何使用属性解析对象,以及许多其他很酷的功能,同时也比内置的.NET版本更快

答案 1 :(得分:1)

伪码回答:

main(){
recurse(0, myHashTable)
}

recurse(int level, Structure tableOrArray){
     for element x in tableOrArray{
          if(x is a string) print (level)*indent + x;
          if(x is not a string) recurse(level + 1, x)
     }
}