2017-02-06 91 views
1

這樣:解析字符串來建模

HttpContent requestContent = Request.Content; 
string jsonContent = requestContent.ReadAsStringAsync().Result; 

那麼在這種jsonContent:

ID = 1234 & toName = & fromId = 49gjgijl7a4in

我試圖分析在型號:

Model model = JsonConvert.DeserializeObject<Model>(jsonContent); 

但它拋出一個異常:

錯誤解析布爾值。路徑'',第0行,位置0

任何想法?

編輯:

我的客戶端邏輯:

   var client = new HttpClient(); 
       var values = new Dictionary<string, string>() 
       { 
        {"toId", obj.toId}, 
        {"toName", obj.toName}, 
        {"fromId", obj.fromId}, 
       }; 
       var content = new FormUrlEncodedContent(values); 

       var response = await client.PostAsync(apiUrl, content); 
       response.EnsureSuccessStatusCode(); 
+4

這不是JSON。 – Ben

+1

如果它不是'JSON',爲什麼要使用'JsonConvert'? –

+0

[我如何使用C#解碼URL參數?](http://stackoverflow.com/questions/1405048/how-do-i-decode-a-url-parameter-using-c) –

回答

1

爲了解析URI中的查詢字符串參數,如果你想爲Json對象使用此代碼(客戶端)發送數據從System.Web.HttpUtility

var content = Request.Content.ReadAsStringAsync().Result; 
var query = HttpUtility.ParseQueryString(content); 
var id = query.Get("ID"); 
var toName = query.Get("toName"); 
+0

這做到了魔法。 :) 謝謝! – activ8

0

Json的內容應該是這樣。檢查你的內容

{ 
"ID":1234, 
"toName":"", 
"fromId": "49gjgijl7a4in" 
} 
+0

我是創造這種方式。但是如何從頭文件獲取內容後將其轉換爲模型? – activ8

+0

如果您有型號,您可以嘗試此方法: TryUpdateModel (requestContent); –

1

使用:

var client = new HttpClient(); 

var jsonObj = (dynamic)new JsonObject(); 
jsonObj.toId = obj.toId; 
jsonObj.toName = obj.toName; 
jsonObj.fromId = obj.fromId; 

var content = new StringContent(jsonObj.ToString(), Encoding.UTF8, "application/json"); 

var response = await client.PostAsync(apiUrl, content); 
      response.EnsureSuccessStatusCode(); 

然後,您可以在您的問題中使用JsonConvert

OR

如果你想發送的數據作爲查詢字符串但隨後爲Json使用:

var dict = HttpUtility.ParseQueryString(jsonContent); 
var json = new JavaScriptSerializer().Serialize(
        dict.AllKeys.ToDictionary(k => k, k => dict[k])); 

然後你可以使用JsonConvert將其反序列化到您的模型。

OR

如果你不想改變客戶端邏輯:

var dict = HttpUtility.ParseQueryString(jsonContent); 

YourModel model = new YourModel() 
{ 
    Id = dict.Get("ID"]), 
    ToName = dict.Get("toName"), 
    FromId = dict.Get("fromId") 
}; 
0
HttpContent requestContent = Request.Content; 
string jsonContent = requestContent.ReadAsStringAsync().Result; 

//you can split your jsonContent then you use the code 
string[] paramsArrs = jsonContent.Split('&');`