C# 将由点分隔的字符串键序列化为Json值
我使用数据库来保存Json结构和值。使用Testdata作为字典的结构类似于: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
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对不起,我有一段时间没有活动了。。。我应该仍然有那个代码,并将用我用来解决它的代码更新这个问题。