Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将由点分隔的字符串键序列化为Json值_C#_Json_Json.net - Fatal编程技术网

C# 将由点分隔的字符串键序列化为Json值

C# 将由点分隔的字符串键序列化为Json值,c#,json,json.net,C#,Json,Json.net,我使用数据库来保存Json结构和值。使用Testdata作为字典的结构类似于: Dictionary<string, string> input = new Dictionary<string, string>(); input.Add("application.shortName", "TestShortName"); input.Add("application.longName", "TestLongName"); input.Add("application.de

我使用数据库来保存Json结构和值。使用Testdata作为字典的结构类似于:

Dictionary<string, string> input = new Dictionary<string, string>();
input.Add("application.shortName", "TestShortName");
input.Add("application.longName", "TestLongName");
input.Add("application.description", "TestDescription");
input.Add("application.deepNode.evenDeeperNode", "Values so deep, you can see Adelle rolling");
input.Add("common.yes", "YesTest");
input.Add("common.no", "NoTest");
input.Add("common.save", "SaveTest");
input.Add("common.pager.pagesLenghtBefore", "LengthTestDeepNode");
我使用的是JSON.NET,但我几乎没有触及表面,也不知道是否有这样的方法。我知道我可以将字典转换为Json,但由于我的键的深度未知,这不可能直接实现。我试图想出一个循环来分割键,并向最后一个分割的节点添加值,尽管我从未真正能够编写这样的程序


我希望这不是一个不合适的问题,但我真的需要帮助。我很感激任何正确方向的建议。提前感谢

您可以使用动态对象而不是字典,如:

var input = new {application = new {shortName = "TestShortName",
                                    longName = "TestLongName"
                                     ....},
                 common = new {yes = "YesTest",
                                  ..........}
                 }
或使用:


您可以使用动态对象而不是字典,如:

var input = new {application = new {shortName = "TestShortName",
                                    longName = "TestLongName"
                                     ....},
                 common = new {yes = "YesTest",
                                  ..........}
                 }
或使用:


如果您需要将字典转换为json,那么下面的代码段将为您提供:

        var input = new Dictionary<string, string>();
        input.Add("application.shortName", "TestShortName");
        input.Add("application.longName", "TestLongName");
        input.Add("application.description", "TestDescription");
        input.Add("application.deepNode.evenDeeperNode", "Values so deep, you can see Adelle rolling");
        input.Add("common.yes", "YesTest");
        input.Add("common.no", "NoTest");
        input.Add("common.save", "SaveTest");
        input.Add("common.pager.pagesLenghtBefore", "LengthTestDeepNode");

        var res = new Dictionary<string, Object>();
        foreach(var pair in input)
        {
            var key = pair.Key;
            var parts = key.Split('.');
            var currentObj = res;
            for (int i = 0; i < parts.Length-1; i++)
            {
                var property = parts[i];
                if (!currentObj.Keys.Contains(property))
                    currentObj[property] = new Dictionary<string, Object>();
                currentObj = (new Dictionary<string, Object>())currentObj[property];
            }

            currentObj[parts[parts.Length - 1]] = pair.Value;
        }

        var json = JsonConvert.SerializeObject(res, Formatting.Indented);
var input=newdictionary();
input.Add(“application.shortName”、“TestShortName”);
input.Add(“application.longName”、“TestLongName”);
input.Add(“application.description”、“TestDescription”);
Add(“application.deepNode.evendepernode”,“值如此之深,您可以看到Adelle滚动”);
输入。添加(“common.yes”、“YesTest”);
输入。添加(“通用编号”、“注释”);
input.Add(“common.save”、“SaveTest”);
input.Add(“common.pager.pagesLenghtBefore”、“LengthTestDeepNode”);
var res=新字典();
foreach(输入中的var对)
{
var key=pair.key;
var parts=键。拆分('.');
var currentObj=res;
对于(int i=0;i
如果您需要将字典转换为json,那么下面的代码片段将为您提供:

        var input = new Dictionary<string, string>();
        input.Add("application.shortName", "TestShortName");
        input.Add("application.longName", "TestLongName");
        input.Add("application.description", "TestDescription");
        input.Add("application.deepNode.evenDeeperNode", "Values so deep, you can see Adelle rolling");
        input.Add("common.yes", "YesTest");
        input.Add("common.no", "NoTest");
        input.Add("common.save", "SaveTest");
        input.Add("common.pager.pagesLenghtBefore", "LengthTestDeepNode");

        var res = new Dictionary<string, Object>();
        foreach(var pair in input)
        {
            var key = pair.Key;
            var parts = key.Split('.');
            var currentObj = res;
            for (int i = 0; i < parts.Length-1; i++)
            {
                var property = parts[i];
                if (!currentObj.Keys.Contains(property))
                    currentObj[property] = new Dictionary<string, Object>();
                currentObj = (new Dictionary<string, Object>())currentObj[property];
            }

            currentObj[parts[parts.Length - 1]] = pair.Value;
        }

        var json = JsonConvert.SerializeObject(res, Formatting.Indented);
var input=newdictionary();
input.Add(“application.shortName”、“TestShortName”);
input.Add(“application.longName”、“TestLongName”);
input.Add(“application.description”、“TestDescription”);
Add(“application.deepNode.evendepernode”,“值如此之深,您可以看到Adelle滚动”);
输入。添加(“common.yes”、“YesTest”);
输入。添加(“通用编号”、“注释”);
input.Add(“common.save”、“SaveTest”);
input.Add(“common.pager.pagesLenghtBefore”、“LengthTestDeepNode”);
var res=新字典();
foreach(输入中的var对)
{
var key=pair.key;
var parts=键。拆分('.');
var currentObj=res;
对于(int i=0;i
你试过改用字典吗?这样,您就可以嵌套输入[“应用程序”]=new Dictionary(),从而在对象图中更准确地表示JSON结构。我读过类似这样的东西,但还没有找到解决办法。我会在这方面做更多的工作。你试过改用字典吗?这样,您就可以嵌套输入[“应用程序”]=new Dictionary(),从而在对象图中更准确地表示JSON结构。我读过类似这样的东西,但还没有找到解决办法。我将在这方面做更多的工作。问题是我不知道数据库中的名字。我得到一个类似“key1.key2”的字符串。那么我还能使用动态对象吗?我将编辑这个问题,指出一个好答案。我相信你也可以使用ExpandoObject作为字典。好的,再仔细研究一下,我发现你可以通过字符串名称向ExpandoObject添加属性。这是一个非常好的方法,我会用它来解决我的问题。谢谢大家!@我知道这是个老问题,但你最后是怎么解决的?根据你给出的例子,你能给出一个你使用的代码的例子吗?我有完全相同的问题。Thanks@Dom对不起,我有一段时间没有活动了。。。我应该仍然有那个代码,并将用我用来解决它的代码更新这个问题。问题是我不知道来自数据库的名称。我得到一个类似“key1.key2”的字符串。那么我还能使用动态对象吗?我将编辑这个问题,指出一个好答案。我相信你也可以使用ExpandoObject作为字典。好的,再仔细研究一下,我发现你可以通过字符串名称向ExpandoObject添加属性。这是一个非常好的方法,我会用它来解决我的问题。谢谢大家!@我知道这是个老问题,但你最后是怎么解决的?根据你给出的例子,你能给出一个你使用的代码的例子吗?我有完全相同的问题。Thanks@Dom对不起,我有一段时间没有活动了。。。我应该仍然有那个代码,并将用我用来解决它的代码更新这个问题。