JSON字串如下
[{"rowValue":[{"componentType":"DepartmentField","label":"費用承擔部門","extendValue":[{"number":12,"name":"業務四部","id":"104380371"}],"value":"業務四部","key":"DepartmentField-K371IHGJ"},{"componentType":"TextareaField","label":"用途說明","value":"抵押金置換","key":"付款事由"},{"componentType":"DDSelectField","label":"付款幣種","extendValue":{"key":"option_0"},"value":"人民幣","key":"DDSelectField-K371IHGN"},{"componentType":"MoneyField","label":"付款金額(元)","value":"370000","key":"MoneyField-K371IHGO"}]}]
定義的類如下
public class extendValue
{
public int number { get; set; }
public string name { get; set; }
public string id { get; set; }
public string key { get; set; }
}
public class rowValue
{
public string componentType { get; set; }
public string label { get; set; }
public List<extendValue> extendValue { get; set; }
public string value { get; set; }
public string key { get; set; }
}
決議代碼如下
JavaScriptSerializer jsss = new JavaScriptSerializer();
List<rowValue> rowValueItems = jsss.Deserialize<List<rowValue>>(recValues.Value.ToString());
foreach(rowValue rowValueItem in rowValueItems)
{}
//執行以上代碼,rowValue中的屬性值全為空,沒決議處理,請問這是什么問題,列名什么的沒看出有什么錯。請問出什么問題了么?
謝謝
uj5u.com熱心網友回復:
復制json,打開vs,編輯--選擇性黏貼--將json粘貼為類。然后產生的class,就可以直接使用了。
如果一定要用你自己的rowValue,那么對比一下生成的class。修改一下就好了。
uj5u.com熱心網友回復:
recValues.Value.ToString()的值等于上面那個json字串??uj5u.com熱心網友回復:
如果你recValues.Value.ToString()的值等于上面那個json字串。那你要轉換的型別其實應該是:List<Dictionary<string, List<rowValue>>>
List<Dictionary<string, List<rowValue>>> list = jsss.Deserialize<List<Dictionary<string, List<rowValue>>>>(json);
// list[0]["rowValue"][0].componentType;
否則,你要從json字串中把前面的:[{"rowValue": 和后面的 }] 去掉,否則資料格式對不上
uj5u.com熱心網友回復:
recValues.Value.ToString()的值等于上面那個json字串List<Dictionary<string, List<rowValue>>> list = jsss.Deserialize<List<Dictionary<string, List<rowValue>>>>(json);
這樣還是不行。
list的Count 直接回傳0
uj5u.com熱心網友回復:
哦,請問 去掉 [{"rowValue":后,物體類怎么定義?直接這樣?
rowValue rowValueItems = jsss.Deserialize<rowValue>(recValues.Value.ToString());
uj5u.com熱心網友回復:
不可能的
string json = "[{\"rowValue\":[{\"componentType\":\"DepartmentField\",\"label\":\"費用承擔部門\",\"extendValue\":[{\"number\":12,\"name\":\"業務四部\",\"id\":\"104380371\"}],\"value\":\"業務四部\",\"key\":\"DepartmentField-K371IHGJ\"},{\"componentType\":\"TextareaField\",\"label\":\"用途說明\",\"value\":\"抵押金置換\",\"key\":\"付款事由\"},{\"componentType\":\"DDSelectField\",\"label\":\"付款幣種\",\"extendValue\":{\"key\":\"option_0\"},\"value\":\"人民幣\",\"key\":\"DDSelectField-K371IHGN\"},{\"componentType\":\"MoneyField\",\"label\":\"付款金額(元)\",\"value\":\"370000\",\"key\":\"MoneyField-K371IHGO\"}]}]";
List<Dictionary<string, List<rowValue>>> list = Tool.JsonToT<List<Dictionary<string, List<rowValue>>>>(json);
list.Count.ToString();//=> 1
string json = "[{\"componentType\":\"DepartmentField\",\"label\":\"費用承擔部門\",\"extendValue\":[{\"number\":12,\"name\":\"業務四部\",\"id\":\"104380371\"}],\"value\":\"業務四部\",\"key\":\"DepartmentField-K371IHGJ\"},{\"componentType\":\"TextareaField\",\"label\":\"用途說明\",\"value\":\"抵押金置換\",\"key\":\"付款事由\"},{\"componentType\":\"DDSelectField\",\"label\":\"付款幣種\",\"extendValue\":{\"key\":\"option_0\"},\"value\":\"人民幣\",\"key\":\"DDSelectField-K371IHGN\"},{\"componentType\":\"MoneyField\",\"label\":\"付款金額(元)\",\"value\":\"370000\",\"key\":\"MoneyField-K371IHGO\"}]";
List<rowValue> list = Tool.JsonToT<List<rowValue>>(json);
list.Count.ToString();// => 4
uj5u.com熱心網友回復:
我用的是Newtonsoft.Json類,網上下的,靈活好用。你可以試試。uj5u.com熱心網友回復:
我用類和你似乎有點不同,我是 JavaScriptSerializer jsss = new JavaScriptSerializer();Tool.JsonToT<List<rowValue>>(json); 你用的這個是什么DLL?
還有就是 我得到的JSON沒有你字符中的那些 \ 字符。我也是頭一次決議這個,以前都是整XML,沒整過JSON,還望指教!
uj5u.com熱心網友回復:
自己做了個簡單的封裝呼叫,里面就是和你一樣的
那你試試進行一下轉義唄……recValues.Value.ToString().Replace("\"","\\\"");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/203051.html
標籤:C#
下一篇:大一作業求解答
