2015-01-26 5 views
0

자바 스크립트 응용 프로그램과 WCF 서비스간에 통신을 시도하고 있습니다. WCF 서비스는 나는 다음과 같은 방법을 제공 만든 :WCF 서비스에서 전달할 Json 문자열 준비 문제.

[OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, UriTemplate = "/ExportToXml")] 
    void ExportToXml(List<Span> spans, List<Detection> detections); 

    [DataContract] 
    public class Detection 
    { 
     [DataMember] 
     public int TID { get; set; } 

     [DataMember] 
     public double Longitude { get; set; } 

     [DataMember] 
     public double Latitude { get; set; } 

     [DataMember] 
     public double Height { get; set; } 

     [DataMember] 
     public int SN { get; set; } 

     [DataMember] 
     public string TLine_Name { get; set; } 
    } 

    [DataContract] 
    public class Span 
    { 
     [DataMember] 
     public int SN { get; set; } 

     [DataMember] 
     public double Longitude { get; set; } 

     [DataMember] 
     public double Latitude { get; set; } 

     [DataMember] 
     public string TLine_Name { get; set; } 
    } 

그러나, 나는 문제가 JS 클라이언트 측이 함수에 전달하는 JSON을 준비하는 데. 내가 준비한 json의 형식은 다음과 같습니다.

var input = { 
       "spans": [{ 
        "SN": 1, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "TLine_Name": "Circuit Test 1" 
       }, { 
        "SN": 2, 
        "Longitude": 2000000, 
        "Latitude": 2000000, 
        "TLine_Name": "Circuit Test 2" 
       }], 

       "detections": [{ 
        "TID": 1, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "Height": 15, 
        "SN": 1, 
        "TLine_Name": "Circuit Test 1" 
       }, { 
        "TID": 2, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "Height": 12, 
        "SN": 1, 
        "TLine_Name": "Circuit Test 1" 
       }, { 
        "TID": 3, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "Height": 14, 
        "SN": 1, 
        "TLine_Name": "Circuit Test 1" 
       }, { 
        "TID": 4, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "Height": 10, 
        "SN": 2, 
        "TLine_Name": "Circuit Test 2" 
       }, { 
        "TID": 5, 
        "Longitude": 1000000, 
        "Latitude": 1000000, 
        "Height": 8, 
        "SN": 2, 
        "TLine_Name": "Circuit Test 2" 
       }] 
      }; 

서비스는 위의 json 입력을 좋아하지 않습니다. 이 문제에 대한 도움은 대단히 감사하겠습니다.

+0

오류가 무엇인가는? –

답변

0

내 컴퓨터에서 실행되는 서비스에 JSON 개체를 보낼 수 있습니다. 따라서 서비스에 전송되는 JSON 객체의 형식은 문제가 아닙니다. 다른 문제가 있습니다. 클라이언트에 대한 자세한 내용은 그것이 무엇인지 해결하는 데 도움이 될 수 있습니다.

나는 당신의 클라이언트가 자바 스크립트 응용 프로그램입니다 것을 이해하지만, 여기에 성공적으로 서비스에 JSON 객체를 전송 내 C# 클라이언트입니다 :

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:9001/WCFServices/RestfulService/ExportToXml"); 
request.ContentType = "text/json"; 
request.Method = "POST"; 
using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
{ 
    string json = @"{ ""spans"": " + 
     @"[{ ""SN"": 1, ""Longitude"": 1000000,""Latitude"": 1000000,""TLine_Name"": ""Circuit Test 1""}, " + 
     @"{""SN"": 2, ""Longitude"": 2000000, ""Latitude"": 2000000, ""TLine_Name"": ""Circuit Test 2"" }]," + 
     @"""detections"": " + 
     @"[{ ""TID"": 1, ""Longitude"": 1000000, ""Latitude"": 1000000, ""Height"": 15,""SN"": 1, ""TLine_Name"": ""Circuit Test 1"" }, " + 
     @"{ ""TID"": 2, ""Longitude"": 1000000, ""Latitude"": 1000000, ""Height"": 12, ""SN"": 1, ""TLine_Name"": ""Circuit Test 1"" }, " + 
     @"{ ""TID"": 3, ""Longitude"": 1000000, ""Latitude"": 1000000, ""Height"": 14, ""SN"": 1, ""TLine_Name"": ""Circuit Test 1"" }, " + 
     @"{ ""TID"": 4, ""Longitude"": 1000000, ""Latitude"": 1000000, ""Height"": 10, ""SN"": 2, ""TLine_Name"": ""Circuit Test 2"" }, " + 
     @"{ ""TID"": 5, ""Longitude"": 1000000, ""Latitude"": 1000000, ""Height"": 8, ""SN"": 1, ""TLine_Name"": ""Circuit Test 2"" }] }"; 
    streamWriter.Write(json); 
} 
WebResponse ws = request.GetResponse(); 
Encoding enc = System.Text.Encoding.GetEncoding(1252); 
StreamReader responseStream = new StreamReader(ws.GetResponseStream()); 
string response = responseStream.ReadToEnd(); 
responseStream.Close();