gpt4 book ai didi

c# - ASP.NET *.resx 序列化

转载 作者:太空狗 更新时间:2023-10-30 00:46:36 24 4
gpt4 key购买 nike

我正在为一个 I18N 项目做贡献,有人要求将我们的 *.resx 文件序列化为 JSON 对象(无论出于何种原因)。

我想知道的是:

  • 有没有办法获取给定 *.resx 文件的所有有效 key 的列表,以便我们可以使用 HttpContext.GetGlobalResourceObject 获取 token ?
  • 如果那行不通,有没有人想出一个聪明的解决方案?

最佳答案

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com