How to convert json to flat structure in C#

前端 未结 2 1013
刺人心
刺人心 2021-01-04 20:07

I\'m trying to write function in C# that will converts JSON to a key/value pairs. It should support arrays. So for example the following JSON:

{ 
    title:          


        
相关标签:
2条回答
  • 2021-01-04 20:30

    I'd look into http://json.codeplex.com/

    I think that does what you need.

    0 讨论(0)
  • 2021-01-04 20:44

    The solution for this is as following. JavaScriptSerializer creates object ('o') from json string ('json'), than method BuildVariablesList traverse the object and populates dictionary ('additionalParameters') that contains results.

        var jss = new JavaScriptSerializer();
        var o = return new DynamicJsonObject(jss.Deserialize<Dictionary<string, object>>(json));
    
        var additionalParameters = new Dictionary<string, string>();
        BuildVariablesList(o.GetInternalDictionary(), "", additionalParameters);
    
        private static string AppendToPathString (string path, object part )
        {
            return path.Trim().Length == 0 ? part.ToString() : path + '.' + part;
        }
    
        public static void BuildVariablesList(object obj, string path, Dictionary<string, string> result)
        {
            if ( obj is ArrayList)
            {
                var arrayObj = obj as ArrayList;
                for (var i = 0; i<arrayObj.Count; i++ )
                {
                    BuildVariablesList(arrayObj[i], AppendToPathString(path,i), result);
                }
            }else if ( obj is Dictionary<string, object>)
            {
                var dictObject = obj as Dictionary<string, object>;
                foreach (var entry in dictObject)
                {
                    if (entry.Value is String && (path.Trim().Length > 0 || !ReservedFieldNames.Contains( entry.Key.ToLower())))
                    {
                        result.Add(AppendToPathString(path,entry.Key), entry.Value as String);
                    }
                    else if (entry.Value is Dictionary<string, object>)
                    {
                        BuildVariablesList(entry.Value as Dictionary<string, object>, AppendToPathString(path, entry.Key), result);
                    }
                    else if (entry.Value is ArrayList)
                    {
                        BuildVariablesList(entry.Value as ArrayList, AppendToPathString(path, entry.Key), result);
                    }
                }
            }            
        }
    
    0 讨论(0)
提交回复
热议问题