JSON.NET:反序列化并合并JSON字符串
JSON.NET: Deserialise and merge JSON string
我有一个 JSON 字符串来自一个包含多个 JSON 对象的文件,我需要将其反序列化为一个合并的 C# 对象。
File1.json
{
"manage_employees_section_title":
{
"value": "Manage employees",
"description": "The mange employees section title"
}
}
{
"manage_operations_section_title":
{
"value": "Manage operations",
"description": "The mange operations section title"
}
}
即使文件中有多个 JSON 对象,我真的很想从反序列化(或其他方式)中返回一个合并的 C# 对象,就像它来自这样的字符串:
{
"manage_employees_section_title":
{
"value": "Manage employees",
"description": "The mange employees section title"
},
"manage_operations_section_title":
{
"value": "Manage operations",
"description": "The mange operations section title"
}
}
这可以用 JSON.NET
或任何其他工具实现吗?
非常感谢你们..
第一个代码块isn't valid JSON。如果您希望 JSON 库处理您的输入,您首先需要将其转换为有效的 JSON.
如果您的输入总是看起来像那样,您可以使用正则表达式找到 }\r\n\{
并将其替换为逗号,然后将生成第二个示例:
var output = Regex.Replace(input, "\r\n}\r\n{", ",");
使用您提供的第一个示例的输入,现在生成第二个示例作为输出,它是有效的 JSON 并且可以适当地反序列化。
如果组合的 XmlDocument 足够好,那么您可以:
string json1 = "{ \"manage_employees_section_title\": {\"value\": \"Manage employees\",\"description\": \"The mange employees section title\"}}";
string json2 = "{ \"manage_operations_section_title\": {\"value\": \"Manage operations\",\"description\": \"The mange operations section title\"}}";
XmlDocument doc = new XmlDocument();
var root = doc.CreateElement("element", "root", "");
doc.AppendChild(root);
var xmlNode = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json1);
var xmlNode2 = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json2);
foreach (XmlNode node in xmlNode.ChildNodes)
{
XmlNode imported = doc.ImportNode(node, true);
doc.DocumentElement.AppendChild(imported);
}
foreach (XmlNode node in xmlNode2.ChildNodes)
{
XmlNode imported = doc.ImportNode(node, true);
doc.DocumentElement.AppendChild(imported);
}
产生:
<?xml version="1.0" ?>
<root>
<manage_employees_section_title>
<value>Manage employees</value>
<description>The mange employees section title</description>
</manage_employees_section_title>
<manage_operations_section_title>
<value>Manage operations</value>
<description>The mange operations section title</description>
</manage_operations_section_title>
</root>
我有一个 JSON 字符串来自一个包含多个 JSON 对象的文件,我需要将其反序列化为一个合并的 C# 对象。
File1.json
{
"manage_employees_section_title":
{
"value": "Manage employees",
"description": "The mange employees section title"
}
}
{
"manage_operations_section_title":
{
"value": "Manage operations",
"description": "The mange operations section title"
}
}
即使文件中有多个 JSON 对象,我真的很想从反序列化(或其他方式)中返回一个合并的 C# 对象,就像它来自这样的字符串:
{
"manage_employees_section_title":
{
"value": "Manage employees",
"description": "The mange employees section title"
},
"manage_operations_section_title":
{
"value": "Manage operations",
"description": "The mange operations section title"
}
}
这可以用 JSON.NET
或任何其他工具实现吗?
非常感谢你们..
第一个代码块isn't valid JSON。如果您希望 JSON 库处理您的输入,您首先需要将其转换为有效的 JSON.
如果您的输入总是看起来像那样,您可以使用正则表达式找到 }\r\n\{
并将其替换为逗号,然后将生成第二个示例:
var output = Regex.Replace(input, "\r\n}\r\n{", ",");
使用您提供的第一个示例的输入,现在生成第二个示例作为输出,它是有效的 JSON 并且可以适当地反序列化。
如果组合的 XmlDocument 足够好,那么您可以:
string json1 = "{ \"manage_employees_section_title\": {\"value\": \"Manage employees\",\"description\": \"The mange employees section title\"}}";
string json2 = "{ \"manage_operations_section_title\": {\"value\": \"Manage operations\",\"description\": \"The mange operations section title\"}}";
XmlDocument doc = new XmlDocument();
var root = doc.CreateElement("element", "root", "");
doc.AppendChild(root);
var xmlNode = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json1);
var xmlNode2 = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json2);
foreach (XmlNode node in xmlNode.ChildNodes)
{
XmlNode imported = doc.ImportNode(node, true);
doc.DocumentElement.AppendChild(imported);
}
foreach (XmlNode node in xmlNode2.ChildNodes)
{
XmlNode imported = doc.ImportNode(node, true);
doc.DocumentElement.AppendChild(imported);
}
产生:
<?xml version="1.0" ?>
<root>
<manage_employees_section_title>
<value>Manage employees</value>
<description>The mange employees section title</description>
</manage_employees_section_title>
<manage_operations_section_title>
<value>Manage operations</value>
<description>The mange operations section title</description>
</manage_operations_section_title>
</root>