- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如何在 C# 中将 *.RESX XML 文件转换为 JSON 文件?
我有常规的 RESX 文件。例如:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data xml:space="preserve" name="KEY_1">
<value>Text A</value>
</data>
<data xml:space="preserve" name="KEY_2">
<value>Text B</value>
</data>
</root>
我需要将此文件转换为 JSON 文件:
{
"Texts": [
{
"id": "KEY_1",
"text": "Text A"
},
{
"id": "KEY_2",
"text": "Text B"
}
]
}
如您所见,转化仅与数据相关:
<data xml:space="preserve" name="KEY_1">
<value>Text A</value>
</data>
<data xml:space="preserve" name="KEY_2">
<value>Text B</value>
</data>
其他一切都与转型无关。
编辑:我有解决方案,但我认为它可以做得更好
using System.Xml;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace XMLtoJSON
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> result = new Dictionary<string, string>();
// To convert an XML node contained in string xml into a JSON string
var xml = File.ReadAllText(@"C:\Test\ClientLocalization.en-US.resx");
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNodeList node = doc.GetElementsByTagName("data");
foreach (XmlNode item in node)
{
var value = item.InnerText.Trim();
var keyName = item.Attributes.Cast<XmlAttribute>().FirstOrDefault(f => f.Name == "name");
if (keyName != null)
{
var key = keyName.InnerText.Trim();
result.Add(key, value);
}
}
string res = @"{ ""Text"" : [ ";
foreach (var item in result)
{
res += "{";
res += $" \"id\":\"{item.Key}\",\"text\":\"{item.Value}\"";
res += "},";
}
res = res.Remove(res.Length - 1);
res += @" ]} ";
}
}
}
最佳答案
我不使用 XmlDocument
,而是使用 XElement
因为它对 LINQ 更友好。使用 XElement.Parse
加载 XML,然后选择您感兴趣的节点并将它们塑造成反射(reflect)您想要的 JSON 的匿名对象结构。最后,使用您最喜欢的 JSON 序列化程序(例如 Json.Net 或 JavaScriptSerializer
)从那里创建 JSON。我不建议手动滚动您自己的 JSON,因为它很容易出错。
using Newtonsoft.Json;
var xml = File.ReadAllText(@"C:\Test\ClientLocalization.en-US.resx");
var obj = new
{
Texts = XElement.Parse(xml)
.Elements("data")
.Select(el => new
{
id = el.Attribute("name").Value,
text = el.Element("value").Value.Trim()
})
.ToList()
};
string json = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);
// OR:
//JavaScriptSerializer jss = new JavaScriptSerializer();
//string json = jss.Serialize(obj);
Console.WriteLine(json);
fiddle :https://dotnetfiddle.net/ZIaCjd
关于json - 如何在 C# 中将 *.RESX XML 文件转换为 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631098/
我正在尝试确定是否可以将串联字符串添加到我的本地 .resx 文件之一。这个例子应该阐明: 假设我有一个简单的 ASP.NET 网页,它包含 (1) 一个标签,其文本是一个重要的关键字 (2) 一个具
我只是偶尔写代码,这是我能放在一起的最好的,我希望有人能指出我正确的方向。(我一直在寻找其他答案,但他们只让我走到这一步) import xml.etree.ElementTree as ET tre
我正在使用 .NET 2.0 Framework 中的一个 Web 项目,但是当我在 4.0 Framework 中打开该项目时,它给出了无效的 resx 文件错误。我的项目的工作方式是,我有一个空的
在.Net Core official documentation for localization ,提到了如何使 DataAnnotations 由 IStringLocalizer 从一个特殊的
所以我有一个 C# 应用程序。它有一些链接到它的 Assets ,并在编译时被嵌入。应用程序在 Windows 上完美编译和运行。当测试与单声道的兼容性时,一切都是正确的。如果我尝试编译给出一个错误
我被赋予了国际化大型客户端-服务器应用程序的任务。职责是我让应用程序“世界就绪”,然后将编译的应用程序和资源传递给另一个国家的同事进行翻译并发布给他们的客户。会有几个国家,因此会有几个单独的翻译。 这
我想从WPF窗口访问我的Strings.resx文件,但它给了我以下错误: "Strings" does not exist in the namespace "clr-namespa
我们将处理我们的 .resx 文件以进行翻译。由于这些文件除了要翻译的字符串之外还有很多 xml 数据,所以我一直在寻找一种方法来计算已翻译的单词/字符串。我们有 winform 创建的 resx 文
我在单独的 .resx 文件中有 3 组 9 个图像,我正在尝试弄清楚如何将一组循环到 9 个静态图片框中。 Loop through all the resources in a .resx fil
我在一台相当强大的机器上使用 Visual Studio 2010 工作。我有一个解决方案,下面有几个不同的项目 Solution Activations DatabaseManager
我们正在使用一些大型的 asp.net 网络工具包制作网络应用程序。一开始我们创建了很多基类,例如命令和服务器控件,以便于我们的工作。 现在,当我们使用它构建我们的应用程序时,我们决定构建另一个。为了
为什么我不想使用 Resx 文件: 我正在寻找 resx 文件的替代方案来为我的项目提供多语言支持,原因如下: 我不喜欢在编写消息时指定“messageId”,这需要更多的努力,而且对流程来说很烦人,
我的表单有问题,它会生成错误。如果我删除它们,它工作正常,但问题变得有点错误。 this.Icon = ((System.Drawing.Icon)(resources.GetObject("$thi
假设我们有一个 Windows 窗体 Form1,我们为其设置了一个图标。 Visual Studio 会将图标存储在 Form1.resx ($this.Icon) 中。 现在我们决定将应用程序本地
大家好,我是 C# 和本地化的新手,我可以使用它,但我想知道是否有任何预制语言 (resx) 文件可供下载,还是我应该自己从头开始创建它们? 谢谢 巴特 最佳答案 有两种方法可以理解您的问题。 如果是
我有一个生成 DbContext 和迁移配置的 T4 模板。在运行时,我使用该模板创建一个程序集,然后使用该程序集生成一个迁移。但是,当我想更新数据库时,仍然以编程方式进行。但是,我收到一个错误: C
我有一个程序集,其中包含一个 Messages.resx,其中包含 GUI 消息字符串,例如是、否、确定、取消、打开等。我的项目引用了这个程序集。我该如何使用它们? 最佳答案 在资源编辑器中,只需将资
我正在考虑为不同的客户自定义应用程序中的各种文本。 .resx 资源似乎是执行此操作的明智方法。然而,我遇到的所有关于 resx 的文献似乎都是关于语言差异的本地化(如英语、法语、西类牙语等),所以只
我正在处理一个旧项目,正在更新它。该程序的一部分有一个工具条,上面有许多按钮,每个按钮都有一个图像。我发现图像存储在 resx 中的 Base64 编码图像流中,并按如下方式访问: System.Co
我的 .resx 文件出现奇怪的错误: “无效的 Resx 文件。ResX 输入无效。找不到 ResX 读取器和写入器类型名称的有效“resheader”标记。C:\Documents and Set
我是一名优秀的程序员,十分优秀!