我有這個代碼
var list = new List<long>();
long id = 202;
list.Add(2000);
list.Add(2001);
list.Add(2002);
var stringOfIds = string.Join(",", list);
var paramList = @"{'ProjectId':" id ", 'EntityIDsList': " stringOfIds "}";
Console.WriteLine(paramList);
var parameters = JsonConvert.DeserializeObject<Dictionary<string, object>>(paramList);
Console.WriteLine(parameters);
由于某些特殊原因,它不會反序列化物件并且會崩潰。我在這里嘗試做的是:將 long 串列轉換為字串,以逗號分隔 -> 構造paramList字串,然后使用Newtonsoft.Json. 我相信錯誤在某個地方,stringOfIds但遺憾的是無法弄清楚。你知道我做錯了什么,我該如何解決?
uj5u.com熱心網友回復:
現在你的 paramList 看起來像這樣:
{
"ProjectId": 202,
"EntityIDsList":
2000,
2001,
2002
}
這不是正確的 JSON。它應該是這樣的:
{
"ProjectId": 202,
"EntityIDsList": [
2000,
2001,
2002
]
}
所以你應該把它改成:
var paramList = @"{'ProjectId':" id ", 'EntityIDsList': [" stringOfIds "]}";
同樣在這一點上Console.WriteLine(parameters);不會告訴你任何有意義的事情,你應該把它改成Console.WriteLine(parameters.ToString());
uj5u.com熱心網友回復:
你有兩個“問題”
- 您需要在 stringOfIds 位周圍添加額外的單引號
- 也許它實際上是你想要的,但是......這會給你一個字典,其中包含 2 個帶有鍵的專案:“ProjectId”和“EnitityIDsList”。
由于串列是字串化的,您也可以使用D<string, string>(或dynamic,具體取決于您實際嘗試執行的操作。
我猜你會想要一個“專案”的集合?所以這個表格對你不起作用。
[
{ "1": "1001,1002" },
{ "2": "2001,2002" }
]
是專案字典的正常 json 形式
[
{ "1": [1001,1002] },
{ "2": [2001,2002] }
]
變成一個D<string,List<int>>會“更好”。
強烈建議您創建類來表示形狀并將其序列化。
此外,雖然 Newtonsoft 會處理單引號,但它們實際上并不是規范的一部分。如果您確實需要以這種方式生成 json,則應該將雙引號轉義到字串中。
也許這只是演示您的實際問題的一個簡化片段,我只是在說明顯而易見的 :D 額外的引號是您的示例代碼的實際“問題”。
uj5u.com熱心網友回復:
您擁有的字串paramList不是有效的 JSON。JSON 物件具有用雙引號而不是單引號包圍的鍵(如果它們是字串,則為值)。
更正帶有轉義雙引號的字串:
@"{""ProjectId"": " id @", ""EntityIDsList"": """ stringOfIds @"""}";
如果您撰寫此字串的目的是將其轉換為物件,則應直接創建一個物件。另請注意,您不能使用Console.WriteLine...列印物件,您需要先將其轉換為字串 ( JsonConvert.SerializeObject) 然后再列印它。
var parameters = new
{
ProjectId = id,
EntityIDsList = stringOfIds
};
Console.WriteLine(JsonConvert.SerializeObject(parameters, Formatting.Indented));
// output:
{
"ProjectId": 202,
"EntityIDsList": "2000,2001,2002"
}
如果您希望 EntityIDList 作為數字串列,請將 EntityIDsList 的值更改為list而不是stringOfIds。
var parameters2 = new
{
ProjectId = id,
EntityIDsList = list
};
Console.WriteLine(JsonConvert.SerializeObject(parameters2, Formatting.Indented));
//output:
{
"ProjectId": 202,
"EntityIDsList": [
2000,
2001,
2002
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/371012.html
上一篇:C#if陳述句中的不同概率
