2013-01-03 9 views
5

मैं जेसन का उपयोग कर एक रेल सर्वर पर फ़ाइल अपलोड करने के लिए एक सी # तंत्र लिख रहा हूं।सी # जेएसओएन स्ट्रिंग परिणामों के प्रारंभ और अंत के लिए डबल कोट्स जोड़ना सर्वर डिकोडिंग त्रुटि

फ़ाइल भाग से पहले, मैं सिर्फ सर्वर से पोस्ट करने के लिए, और json स्ट्रिंग है कि सर्वर पर आ रहा है के साथ कुछ समस्या आ रही है ..

मैं गलत क्या कर रही हो सकता है कोशिश कर रहा हूँ ? मैंने पहले से ही स्ट्रिंग को क्रमबद्ध करने के दो अलग-अलग तरीकों की कोशिश की है, और यहां तक ​​कि पहले से ही धारावाहिक स्ट्रिंग को लोड कर रहा है ...

मुझे आश्चर्य है कि क्या स्ट्रिंग की शुरूआत और अंत में दोनों को डबल कोट्स के साथ कुछ भी करना है, जाहिर है सर्वर पर भेजा जा रहा है , अनुरोध से उन्हें हटाने के लिए और कैसे (आसपास उद्धरण चिह्नों के बिना और WizTools.org से RestClient का उपयोग कर, यह सब ठीक हो जाता है ...):

MultiJson::DecodeError (757: unexpected token at '"{\"receipt\":{\"total\":100.0,\"tag_number\":\"xxxxx\",\"ispaperduplicate\":true},\"machine\":{\"serial_number\":\"111111\",\"safe_token\":\"1Y321a\"}}"') 

मेरे ग # कोड:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using RestSharp; 
using System.Web.Script.Serialization; 
using Newtonsoft.Json; 

namespace RonRestClient 
{ 


    class templateRequest 
    { 
     public Receipt receipt; 
     public class Receipt 
     { 
      public float total; 
      public String tag_number; 
      public bool ispaperduplicate = true; 
      public Receipt(float total, String tagnr) 
      { 
       this.total = total; 
       this.tag_number = tagnr; 
      } 
     }; 
     public Machine machine; 
     public class Machine 
     { 
      public String serial_number; 
      public String safe_token; 
      public Machine(String machinenr, String safe_token) 
      { 
       this.serial_number = machinenr; 
       this.safe_token = safe_token; 
      } 
     }; 
    } 


    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      string path = @"C:\file.pdf"; 
      string tagnr = "p94tt7w"; 
      string machinenr = "2803433"; 
      string safe_token = "123"; 
      float total = 100; 

      templateRequest req = new templateRequest(); 
      req.receipt = new templateRequest.Receipt(total, tagnr); 
      req.machine = new templateRequest.Machine(machinenr, safe_token); 
      //string json_body = JsonConvert.SerializeObject(req); 
      //string json_body = new JavaScriptSerializer().Serialize(req); 


      string json_body = @"{""receipt"" : {""total"":"[email protected]", ""tag_number"":"""[email protected]""",""ispaperduplicate"":true},""machine"":{""serial_number"": """[email protected]""", ""safe_token"": """[email protected]"""}}"; 

      var client = new RestClient("http://localhost:3000"); 

      var request = new RestRequest("/receipts",Method.POST); 


      //set request Body 
      request.AddHeader("Content-type", "application/json"); 
      request.AddHeader("Accept", "application/json"); 
      request.RequestFormat = DataFormat.Json; 

      request.AddBody(json_body); 
      //request.AddParameter("text/json", json_body, ParameterType.RequestBody); 

      // easily add HTTP Headers 


      // add files to upload (works with compatible verbs) 
      //request.AddFile("receipt/receipt_file",path); 

      // execute the request 

      IRestResponse response = client.Execute(request); 
      var content = response.Content; // raw content as string 
      if(response.ErrorMessage !="") content += response.ErrorMessage; 
      response_box.Text = content; 


     } 
    } 
} 

उत्तर

4

समस्या यह है कि RestRequest.AddBody (source code) विधि वास्तव में प्रस्तुत करती है कि सामग्री को सही प्रारूप में क्रमबद्ध नहीं किया गया है।

मतलब यह है कि यह सोचता है कि आप JSON स्ट्रिंग के रूप में .NET स्ट्रिंग को पास करने का प्रयास कर रहे हैं, यह पहचानने के बजाय कि आप वास्तव में उस स्ट्रिंग को JSON ऑब्जेक्ट के रूप में पास करना चाहते हैं।

हालांकि, इसका मतलब है कि कि आप वास्तव में, बहुत ज्यादा काम कर रहे हैं वस्तु serializing खुद JSON करने के लिए द्वारा:

बदलें लाइन

request.AddBody(json_body); 
साथ

:

request.AddBody(req); 

आप नियंत्रित कर सकते जिस तरह से JSON को क्रमबद्धरण RestRequest.JsonSerializer संपत्ति के साथ किया जाता है।

आप पूरी तरह JSON स्ट्रिंग धारण करने के लिए चाहते हैं, तो मुझे लगता है कि आप लिखने के लिए चाहते हो सकता है:

request.AddParameter("application/json", json_body, ParameterType.RequestBody); 

(मैं देख रहा हूँ कि तुम एक लाइन जो टिप्पणी की है व्यावहारिक रूप से करता है कि कि है - तुम क्यों टिप्पणी की थी यह?)

+0

बहुत बढ़िया, न केवल आपने इसे हल करने में मेरी सहायता की, क्योंकि आपने मेरी समस्या के लिए दो अलग-अलग समाधान सुझाए। मैंने टिप्पणी की थी क्योंकि यह काम नहीं कर रहा था: मैं 'application/json' के बजाय' text/json' का उपयोग कर रहा था। वैसे भी, 'request.AddBody (req) 'का उपयोग करके चाल भी ... अब मुझे यह पता लगाना होगा कि रसीद संरचना के भीतर फ़ाइल को कैसे जोड़ना है। धन्यवाद ! – MrWater

+0

यदि अनुरोध है। AddBody (req) 'काम करता है, तो मैं दृढ़ता से सुझाव देता हूं कि आप इसका उपयोग करें, क्योंकि यह स्पष्ट रूप से तरीका है जिसे आप RestSharp का उपयोग करना चाहते हैं। –

+0

बढ़िया! मुझे एक ही समस्या थी - इसे गुगल किया, पहला परिणाम यह है, उछाल! :) धन्यवाद! – albogdano

संबंधित मुद्दे