- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为一个 I18N 项目做贡献,有人要求将我们的 *.resx 文件序列化为 JSON 对象(无论出于何种原因)。
我想知道的是:
最佳答案
Sub ReadRessourceFile()
''#Requires Assembly System.Windows.Forms
Dim rsxr As System.Resources.ResXResourceReader = New System.Resources.ResXResourceReader("items.resx")
''# Iterate through the resources and display the contents to the console.
Dim d As System.Collections.DictionaryEntry
For Each d In rsxr
Console.WriteLine(d.Key.ToString() + ":" + ControlChars.Tab + d.Value.ToString())
Next d
''#Close the reader.
rsxr.Close()
End Sub
然后您需要将其添加到可序列化字典中,然后您可以使用 System.Web.Extensions.dll 将其序列化为 JSON
Public Class JSONHelper
Public Shared Function Serialize(Of T)(ByVal obj As T) As String
Dim JSONserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
Return JSONserializer.Serialize(obj)
End Function
Public Shared Function Deserialize(Of T)(ByVal json As String) As T
Dim obj As T = Activator.CreateInstance(Of T)()
Dim JSONserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
obj = JSONserializer.Deserialize(Of T)(json)
Return obj
End Function
End Class
编辑:C#:
public void ReadRessourceFile()
{
//Requires Assembly System.Windows.Forms '
System.Resources.ResXResourceReader rsxr = new System.Resources.ResXResourceReader("items.resx");
// Iterate through the resources and display the contents to the console. '
System.Collections.DictionaryEntry d = default(System.Collections.DictionaryEntry);
foreach (DictionaryEntry d_loopVariable in rsxr) {
d = d_loopVariable;
Console.WriteLine(d.Key.ToString() + ":" + ControlChars.Tab + d.Value.ToString());
}
//Close the reader. '
rsxr.Close();
}
和 JSON 助手:
public class JSONHelper
{
public static string Serialize<T>(T obj)
{
System.Web.Script.Serialization.JavaScriptSerializer JSONserializer = new System.Web.Script.Serialization.JavaScriptSerializer();
return JSONserializer.Serialize(obj);
}
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
System.Web.Script.Serialization.JavaScriptSerializer JSONserializer = new System.Web.Script.Serialization.JavaScriptSerializer();
obj = JSONserializer.Deserialize<T>(json);
return obj;
}
}
此外,如果您也想获得评论,可以将 UseResXDataNodes 设置为 true。
示例:
public static string ReadRessourceFile()
{
string[] languages = new string[] { "de", "fr", "it", "en" };
string pathPattern = System.AppDomain.CurrentDomain.BaseDirectory;
pathPattern = System.IO.Path.Combine(pathPattern, "..", "..", "..", "libQrCodeGenerator", "Resources", "QRBillText-{0}.resx");
pathPattern = System.IO.Path.GetFullPath(pathPattern);
System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<string, string>> dict = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<string, string>>(System.StringComparer.InvariantCultureIgnoreCase);
foreach (string lang in languages)
{
dict[lang] = new System.Collections.Generic.Dictionary<string, string>(System.StringComparer.InvariantCultureIgnoreCase);
string file = string.Format(pathPattern, lang);
System.Resources.ResXResourceReader rr = new System.Resources.ResXResourceReader(file);
rr.UseResXDataNodes = true;
// '# Iterate through the resources and display the contents to the console.
foreach (System.Collections.DictionaryEntry d in rr)
{
System.Resources.ResXDataNode node = (System.Resources.ResXDataNode)d.Value;
string value = (string) node.GetValue((System.ComponentModel.Design.ITypeResolutionService)null);
string comment = node.Comment;
if(!string.IsNullOrEmpty(comment))
{
System.Console.WriteLine(comment);
}
// dict[lang][d.Key.ToString()] = d.Value.ToString(); // when not using UseResXDataNodes = true
dict[lang][d.Key.ToString()] = value;
}
// '#Close the reader.
rr.Close();
}
string json = Newtonsoft.Json.JsonConvert.SerializeObject(dict, Newtonsoft.Json.Formatting.Indented);
return json;
}
关于c# - ASP.NET *.resx 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838336/
我正在尝试确定是否可以将串联字符串添加到我的本地 .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
我是一名优秀的程序员,十分优秀!