2010-05-14 16 views
6

Ich trage bei einem I18N-Projekt bei und es gibt einen Aufruf, unsere * .resx-Dateien als JSON-Objekte (aus welchem ​​Grund auch immer) zu serialisieren.ASP.NET * .resx Serialisierung

Was ich frage mich, ist:

  • Gibt es eine Möglichkeit, eine Liste aller gültigen Schlüssel für eine gegebene * RESX-Datei zu erhalten, damit wir HttpContext.GetGlobalResourceObject benutzen konnten die Token zu packen ?
  • Wenn das nicht funktioniert, hat jemand mit einer cleveren Lösung, die tut?
+0

Ein Grund, wenn Sie eine App erstellen, die auf JSON-Daten und AJAX-Aufrufen beruht, müssen Sie möglicherweise lokalisierte HTML-Snippets in Javascript ohne die Hilfe Ihrer C# View-Dateien generieren. In diesem Fall ist das JSON-Objekt mit den resx-Daten unzutreffend. – sonjz

Antwort

8
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 

Dann müssen Sie dies einem Serializable Wörterbuch hinzuzufügen, die Sie dann zu JSON serialisiert werden kann System.Web.Extensions.dll mit

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 

Edit: 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(); 
} 

Und der JSON Helfer:

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; 
    } 

} 
+1

JFYI, die meisten SO-Benutzer verstehen C# viel besser – abatishchev

+0

Dann lernen die meisten SO-Benutzer etwas. –

+1

Ja, das "Geheimnis" verwendet die eingebaute ResXResourceReader-Klasse. – Greg

Verwandte Themen