2012-09-10 2 views
0

WCF 서비스를 작성한 다음 J2ME에서이 서비스를 사용한 후에. 내 WCF 서비스는 다음과 같습니다WCF의 올바른 데이터를 소비하고 얻는 방법 J2ME에서 Json을 반환합니다.

IService: 
     [OperationContract] 
       [WebInvoke(Method = "GET", UriTemplate = "/GetByCity/Limit={limit}", BodyStyle = WebMessageBodyStyle.WrappedRequest, 
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
       ItemList GetByCity(string limit); 

Service.CS : 

public ItemList GetByCity(string limit) 
     {   
      DataTable City = ds.Tables["City"]; 
       var items = WithHTML(City, limit); 
       return new ItemList { Items = items }; 
     } 
public List<Item> WithHTML(DataTable City, string limit) 
     { 
      var items = (from d in City.AsEnumerable() 
         where d.Field<string>("strMainHin") != string.Empty 
         orderby d.Field<DateTime>("dtPosted") 
         select new Item 
         { 
          ItemId = d.Field<Int32>("intId").ToString(), 
          ItemLine = htmlEscapes(d.Field<string>("strMainHin")), 
          Photo = @"http://192.168.1.17:801/ImageById/" + d.Field<Int32>("intId") + ".jpg" 
         }).Take(Convert.ToInt32(limit)).ToList(); 

      return items; 
     } 
public string htmlEscape(string input) 
     {   var output = Regex.Replace(input, @"&#([0-9]*);", x => new String((char)int.Parse(x.Groups[1].Value), 1)); 
      return output; 
     } 

이제 URL http://192.168.1.17:803/Patrika/Service.svc/GetByCity/Limit=2 에서이 서비스의 출력은 다음과 같습니다

{"Items":[{"ItemLine":"डेढ़ करोड़ का क्रिकेट सट्टा पकड़ा","ItemId":"821745","Photo":"http:\/\/192.168.1.17:801\/ImageById\/821745.jpg"},{"ItemLine":"पार्किग का इंतजाम नहीं, तो जब्त होंगे वाहन","ItemId":"824837","Photo":"http:\/\/192.168.1.17:801\/ImageById\/824837.jpg"}]} 

하지만이 링크를 통해 J2ME에서이 서비스를 소비 할 때 : 'HTTP ://192.168.1.17:803/Patrika/Service.svc/GetByCity/Limit=2 ' 는 유니 코드 또는 UTF-8 내가 J2ME에서 반환 responce 제공하고있다 :

{"ItemLine":"डेढ़ करोड़ का क�रिकेट सट�टा पकड़ा"} 

모든 것이 잘 진행되고 있지만 일부 유니 코드의 문자열 만 잘못된 출력을 제공합니다. 는 내가 만 하나의 데이터를 보내려고 :

내가 JSON 개체에이 문자열을 가져다가 다음과 같이 라벨에 넣어 J2ME의 끝에서 다음
{"ItemLine":"डेढ़ करोड़ का क्रिकेट सट्टा पकड़ा"} 

:

Label l1=new Label("ItemLine"); 
this.component.add(l1); 

하지만 출력을 나쁜 json 문자열 위와 동일합니다.

+1

심각한 인코딩 문제가있는 좋은 JSON 스 니펫과 JSON 스 니펫 두 개를 보여줍니다. 그들이 어디에서 어떻게 정확히 잡혔는가? 이 두 위치 간에는 어떤 소프트웨어가 관련되어 있습니까? – Codo

+0

실제로 내가 WCF로 끝났을 때 나는이 서비스를 J2ME에서 Eclipse 소프트웨어로 소비하려고 시도했다.이 서비스는 나에게 나쁜 스 니펫을 보여 주었다. WCf는 Visual Studio 2010에서 수행되었습니다. 및 J2ME은 Eclipse에서 수행 중입니다. –

+0

두 JSON 코드 조각을 캡처 한 위치와 방법을 정확히 알려주십시오.클라이언트와 서버를 디버깅하여 디버거 밖으로 복사 한 경우 코드에서 애플리케이션을 중지 한 위치를 정확하게 알려주십시오. J2ME 응용 프로그램에 대한 자세한 정보를 제공해주십시오. JSON 데이터를 검색하고 구문 분석하는 데 사용하는 클래스는 무엇입니까? – Codo

답변

1

IService :

[OperationContract] 
       [WebInvoke(Method = "GET", UriTemplate = "/GetByCity/Limit={limit}", BodyStyle = WebMessageBodyStyle.WrappedRequest, 
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
       ItemList GetByCity(string limit); 

Service.CS :

&#2351;&#2369;&#2357;&#2340;&#2368; &#2325;&#2366; &#2309;&#2343;&#2332;&#2354;&#2366; &#2358;&#2357; &#2350;&#2367;&#2354;&#2366; 

출력은 : 마지막있어서 입력에

public ItemList GetByCity(string limit) 
     {   
      DataTable City = ds.Tables["City"]; 
       var items = WithHTML(City, limit); 
       return new ItemList { Items = items }; 
     } 
public List<Item> WithHTML(DataTable City, string limit) 
     { 
      var items = (from d in City.AsEnumerable() 
         where d.Field<string>("strMainHin") != string.Empty 
         orderby d.Field<DateTime>("dtPosted") 
         select new Item 
         { 
          ItemId = d.Field<Int32>("intId").ToString(), 
          ItemLine = htmlEscapes(d.Field<string>("strMainHin")), 
          Photo = @"http://192.168.1.17:801/ImageById/" + d.Field<Int32>("intId") + ".jpg" 
         }).Take(Convert.ToInt32(limit)).ToList(); 

      return items; 
     } 
public string htmlEscape(string input) 
     {   var output = String.Join("", WebUtility.HtmlDecode(input).Select(x => "\\u" + ((int)x).ToString("X4"))); 
      return output; 
     } 

이다

\\\u0921\\\u0947\\\u0922\\\u093C \\\u0915\\\u0930\\\u094B\\\u0921\\\u093C \\\u0915\\\u093E \\\u0915\\\u094D\\\u0930\\\u093F\\\u0915\\\u0947\\\u091F \\\u0938\\\u091F\\\u094D\\\u091F\\\u093E \\\u092A\\\u0915\\\u0921\\\u093C\\\u093E 

이 출력에서는 '\'이 추가되어 J2ME에서 렌더링되지 않았습니다.

그래서 클라이언트 쪽에서는 J2ME 쪽에서 내가 가지고있는 문자열을 분리 한 다음 \\\\\으로 변환합니다.

그리고 그게 내가 내 힌디어 글꼴을 가지고 전부 : य ु व त ी क ा अ ध ज ल ा श व म ि ल ा.

나를 도왔던 @Codo에게 감사드립니다.

관련 문제