2010-05-14 2 views
6

I18N 프로젝트에 참여하고 있으며 * .resx 파일을 JSON 개체로 serialize하는 호출이 있습니다 (이유가 무엇이든간에).ASP.NET * .resx serialization

내가 궁금하네요 것은 :

  • 우리가 토큰을 잡아 HttpContext.GetGlobalResourceObject을 사용할 수 있도록 주어진 *의 .resx 파일에 대한 유효한 모든 키의 목록을 얻을 수있는 방법이 있나요 ?
  • 그래도 작동하지 않는다면 누구나 똑똑한 해결책을 제시 할 수 있습니까?
+0

JSON 데이터 및 AJAX 호출에 의존하는 응용 프로그램을 만드는 경우 C#보기 파일을 사용하지 않고도 JavaScript에서 현지화 된 HTML 코드 조각을 생성해야 할 수 있습니다. 이 경우 resx 데이터가있는 JSON 객체는 사용할 수 없습니다. – sonjz

답변

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 

그런 다음 당신은 당신이 다음 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; 
    } 

} 
+1

JFYI, 대부분의 SO 사용자는 C#을 훨씬 잘 이해합니다 – abatishchev

+0

그렇다면 대부분의 SO 사용자는 뭔가를 배웁니다. –

+1

예, "비밀"은 내장 된 ResXResourceReader 클래스를 사용하고 있습니다. – Greg