2013-10-21 60 views
1

我想發佈數據到json api。 這就是我的代碼的外觀。它從服務器返回一個錯誤,那裏的人告訴我,我將所有的東西都作爲json字符串發送,並且我應該發佈其中只有一個參數是JSON的參數。即。它應該包含類似下面的字符串contact_attributes:發佈多個參數一個JSON字符串

「{\」 名稱\ 「:\」 雷\」,\ 「姓\」:\ 「達迪\」,\ 「passport_number \」:\ 「 00000020 \」,\「unique_identifier \」:\「7353280000000020 \」,\「msisdn \」: \「27829042259 \」,\「bank_account_number \」:null,\「bank_account_br anch_code \」:null \ 「bank_account_branch_name \」:空,\ 「bank_detai ls_required \」:虛假,\ 「membership_number \」:空,\ 「bank_account_b ank_id \」:空,\ 「bank_account_account_type_id \」:空,\ 「bank_accou nt_initials \」 :null,「bank_account_surname \」:null,\「bank_account_p assport_number \」:null,\「date_of_birth \」:null,\「debit_day \」:null,\「con tract_sale_date \ 「:空,\」 CONTRACT_START_DATE \ 「:空}」

我完全糊塗了,沒有人知道我可以做到這一點。

public class JsonSaleData 
    { 
     [DataMember] 
     public string contact_attributes { get; set; } 
     [DataMember] 
     public string campaign_uuid = "9d119cce-25ea-46bc-b7bc-cba7e8323e91"; 
     [DataMember] 
     public string user_credentials = "OCPdNbeltviij8C1RLcf"; 
     [DataMember] 
     public string license_id = "1"; 

    } 

private string PostSaleToClient(string url, JsonSaleData _SaleData) 
     { 


      string strResult = ""; 
      try 
      { 
       ASCIIEncoding encoding = new ASCIIEncoding(); 


       System.Net.HttpWebRequest httpWebRequest = (HttpWebRequest)System.Net.WebRequest.Create(url); 
       httpWebRequest.Method = "POST"; 
       httpWebRequest.ContentType = "application/json; charset=utf-8"; 


       DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(JsonSaleData)); 
       MemoryStream ms = new MemoryStream(); 
       ser.WriteObject(ms, _SaleData); 
       ms.Position = 0; 
       String json = Encoding.UTF8.GetString(ms.ToArray()); 


       StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()); 
       streamWriter.Write(json); 
       streamWriter.Flush(); 
       streamWriter.Close(); 

       System.Net.HttpWebResponse httpWebResp = (HttpWebResponse)httpWebRequest.GetResponse(); 
       using (var streamReader = new StreamReader(httpWebResp.GetResponseStream())) 
       { 
        strResult = streamReader.ReadToEnd(); 
       } 

       return strResult; 

      } 
      catch (Exception ex) 
      { 
       string e = ex.Message; 
      } 

      return strResult; 


     } 
+0

你需要添加參數來寫入httpRequest的流,字符串postData =「data =」+ jsonString; 。然後將發佈數據字符串寫入字節 – Izikon

+0

轉換爲字符串,然後發送到服務器端,然後通過使用reg-ex –

+0

Hi Ramesh得到值。感謝您的迴應。我發佈銷售詳情的客戶可以看到我的字符串,但他們抱怨說我將所有內容都提交爲json字符串。他們說它應該都是最後一個參數包含一個Json字符串的參數?任何想法這意味着什麼? – Issey

回答

1

試圖處理使用以下功能的JSON SRING。

private string ConvertToJSON(objType obj) 
    { 

string sJSON = "{"; 

try { 
    AppendToJSON(ref sJSON, "obj1Name", obj.obj1); 
    AppendToJSON(ref sJSON, "obj2Name", obj.obj2); 
    AppendToJSON(ref sJSON, "obj3Name", obj.obj3); 
    AppendToJSON(ref sJSON, "obj4Name", obj.obj4); 

    return sJSON.Substring(0, sJSON.Length - 1) + "}"; 

} catch (Exception ex) { 
    return ""; 
} 
} 
private void AppendToJSON(ref string byValJSON, string Name, string Value) 
    { 
byValJSON = byValJSON + "\"" + Name + "\":\"" + Value + "\","; 
    } 

和POST字符串到服務器。

using System.Web; 

public class AttributesHandler : IHttpHandler 
{ 

public void ProcessRequest(System.Web.HttpContext context) 
    { 
string JSON = null; 
string timeOut = null; 

timeOut = System.Web.HttpContext.Current.Server.ScriptTimeout; 
try { 
    System.Web.HttpContext.Current.Server.ScriptTimeout = 600; 
    System.Web.HttpContext.Current.Response.ContentType = "text/javascript"; 
    System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; 
    JSON = ConvertToJSON(obj); 
    System.Web.HttpContext.Current.Response.Write(JSON); 

    System.Web.HttpContext.Current.Server.ScriptTimeout = timeOut; 

} catch (Exception ex) { 
} 

    } 
    } 

呼叫使用DOTNET的代碼:

string Url = ""; 
Url = "http://xxxxxxxxxxxxxx/AttributesHandler.ashx?cd=xx"; 
object @out = null; 
try { 
Net.WebClient webclient = new Net.WebClient(); 
webclient.UseDefaultCredentials = true; 
@out = System.Text.Encoding.ASCII.GetString((webclient.DownloadData(Url))); 
} catch (Exception ex) { 
//out = ex.InnerException.ToString 
} 

在這裏,他們會得到響應,因爲只有字符串。

使用Javascript Ajax。

$.ajax({ 
    type: "GET", timeout: 60000, cache: false, dataType: "jsonp", url: "http://xxxxxxxxxxxxxx/AttributesHandler.ashx?cd=xx"   
    success: function (response) { 
     objAttributes = response.Attributes; //in object formate 
       if (objCardAttributes != null) { 
     //can process the objects 
       } 
       __doPostBack('upToolkit',); 
      }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     var sReturn = "Please close the browser and relaunch "; 
     if (textStatus != null) { sReturn += " Details: (" + textStatus + ")"; } 
     if (errorThrown != null) { sReturn += " Description: (" + errorThrown.Description + ")"; } 
     __doPostBack('upToolkit', sReturn); 
    } 
}); 
+0

嗨Jaya非常感謝你的迴應,我已經改變了我的代碼來使用你的方法來生成字符串,這是一種比我這樣做更方便的方式,但是我仍然收到同樣的錯誤。 HTTP錯誤500內部服務器錯誤。我發佈銷售細節的客戶可以看到我的字符串,但他們抱怨說我將所有內容都作爲字符串提交,它應該都是最後一個參數包含Json字符串的參數?任何想法這意味着什麼? – Issey

+1

你的函數的返回類型看起來像字符串,而且我正在更新我的答案。 – Jay

+0

謝謝Jaya ..我用你的ConvertToJSON方法,並最終將它工作,原來我建立我的json字符串完全不正確。 – Issey

0

您的JSON和您的POCO不匹配......這是沒有必要發佈多個參數,將數據發送到您的server..but JSON在這種情況下,不翻譯成POCO是問題

「{ \「name \」:\「Leigh \」,\「surname \」:\「Duddy \」,\「passport_number \」:\「00000020 \」,\「unique_identifier \」:\「7353280000000020 \」,\「 msisdn \「:\」27829042259 \「,\」bank_account_number \「:null,\」bank_account_br anch_code \「:null,\」bank_account_branch_name \「:null,\」bank_detai ls_required \「:false,\」membership_number \ null,「bank_account_b ank_id」:null,「bank_account_account_type_id」:null,「bank_accountnt_initials」:null,「bank_account_surname」:null,「bank_account_passport_number」:null,「date_of_birth」 :NU LL,\ 「debit_day \」:空,\ 「CON tract_sale_date \」:空,\ 「CONTRACT_START_DATE \」:空}」

www.json2csharp.com看到你JSON是不能分析...

確保您的JSON是正確的..

然後使用本網站的創建CSHARP類和反序列化到特定對象