2010-05-14 11 views
6

Contribuyo en un proyecto I18N y hay una llamada para serializar nuestros archivos * .resx como objetos JSON (por el motivo que sea).ASP.NET * .resx serialization

Lo que me pregunto es:

  • ¿Hay una manera de obtener una lista de todas las claves válidas para un archivo * .resx dado para que pudiéramos utilizar HttpContext.GetGlobalResourceObject para agarrar las fichas ?
  • Si eso no funciona, ¿alguien ha encontrado una solución inteligente que lo haga?
+0

Una razón, si está creando una aplicación que se basa en datos JSON y llamadas AJAX, puede que tenga que generar fragmentos de html localizados en Javascript sin la ayuda de sus archivos C# View. En este caso, el objeto JSON con los datos de resx es invaluble. – sonjz

Respuesta

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 

Luego hay que añadir esto a un diccionario Serializable, que luego se puede serializar a JSON usando System.Web.Extensions.dll

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 

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

y el ayudante 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; 
    } 

} 
+1

JFYI, la mayoría de los usuarios de SO entienden C# mucho mejor – abatishchev

+0

Entonces, la mayoría de los usuarios de SO aprenden algo. –

+1

Sí, el "secreto" está usando la clase ResXResourceReader incorporada. – Greg

Cuestiones relacionadas