C# 如何将JSON属性值转换为键和值数组

C# 如何将JSON属性值转换为键和值数组,c#,json,regex,C#,Json,Regex,我使用Newtonsoft.JSON将数据表序列化为单个JSON负载 生成的有效负载如下所示: [ { "Name" : "Example_Name_1", "Value": "Example Value 1" }, { "Name" : "Example_Name_2", "Value": "Example Value 2" },... ] 对于与外部库一起使用,我需要它: [ {

我使用Newtonsoft.JSON将数据表序列化为单个JSON负载

生成的有效负载如下所示:

[
    {
        "Name" : "Example_Name_1",
        "Value": "Example Value 1"
    },
    {
        "Name" : "Example_Name_2",
        "Value": "Example Value 2"
    },...
]
对于与外部库一起使用,我需要它:

[
    {
        "Name" : "Example_Name_1",
        "Value": {
            "Value": "Example Value 1"
        }
    },
    {
        "Name" : "Example_Name_2",
        "Value": {
            "Value": "Example Value 2"
        }
    },...
]
有没有办法进行这种转变? 我一直在研究正则表达式,但运气不好

我一直在玩不同的正则表达式模式,我看到了另一个类似的SO解决方案,但使用了JavaScript映射

var strJson = "[{\"Name\": \"Example_Name_1\",\"Value\": \"Example Value 1\"}]";

var pattern = "{\"Name\": \"*\",\"Value\": \"*\"}";
var replacement = "{\"Name\": \"*\",\"Value\": {\"Value\": \"*\"}}";
var input = strJSON;
var result = Regex.Replace(input, pattern, replacement);

return result;
[编辑] DataTable只有两列:Property\u Name和Property\u Value 我正在用

    JsonConvert.SerializeObject(myDataTable);

我可能会使用LINQ将数据表转换为您喜欢的格式。您没有提供实际的datatable,但转换如下:

IEnumerable<Data> yourData = GetData();

var transformedData = yourData.Select(d => new {
    Name = d.Name,
    Value = new {
        Value = d.Value
    }
});

string json = JsonConvert.SerializeObject(transformedData);

json变量现在应该是您想要的格式,而不需要使用regex。

看看Newtonsoft.json.Linq名称空间。它包含像JObject、JArray和JToken这样的类来实现您想要做的事情

下面是一个简短的片段,让您开始学习:

var strJson=[{\Name\:\Example\u Name\u 1\,\Value\:\Example Value 1\}]; var newObject=JArray.ParsestrJson; forint i=0;i您可以遍历原始JObject的子体,查找键值或其他内容,将其从字符串转换为JObject,就像我的代码示例一样。

您只需将响应解析为json,并循环遍历数据即可创建新对象。 请检查我使用您的示例数据创建的代码

var runCode=函数{ var strJson=[{\Name\:\Example\u Name\u 1\,\Value\:\Example Value 1\,{\Name\:\Example\u Name\u 2\,\Value\:\Example Value 2\}]; parsedJson=JSON.parsestrJson 新的json=[] 对于变量i=0;iRunCode请提供序列化代码too@ingvar'JsonConvert.SerializeObjectmyDataTable;'剪下来的看起来效果很好。你介意把它转换成C函数吗?@Rhystic很抱歉,我对C不太了解。但是您可以使用此逻辑来循环json。您需要做的就是循环遍历json并将值存储在临时字典中,然后将其附加到listSystem.ArgumentException:“无法将Newtonsoft.json.Linq.JValue添加到Newtonsoft.json.Linq.JObject。”@Rhystic,我更新了答案,使其正常工作。这次我测试了代码:为了得到一个简化的Json字符串,我添加了:returnnewobject.tostringformat.None;