public bool RemoveField(String field)
{
Dictionary<String, Object> map = fields;
StringTokenizer tk = new StringTokenizer(field, ".");
if (!tk.HasMoreTokens())
return false;
List<object> hist = new List<object>();
while (true) {
String s = tk.NextToken();
Object obj;
map.TryGetValue(s, out obj);
if (obj == null)
return false;
hist.Add(map);
hist.Add(s);
if (tk.HasMoreTokens()) {
if (obj is Dictionary<String, Object>)
map = (Dictionary<String, Object>)obj;
else
return false;
}
else {
if (obj is Dictionary<String, Object>)
return false;
else
break;
}
}
for (int k = hist.Count - 2; k >= 0; k -= 2) {
map = (Dictionary<String, Object>)hist[k];
String s = (String)hist[k + 1];
map.Remove(s);
if (map.Count > 0)
break;
}
return true;
}