[英]Deserialize Razor encoded form data (in JSON) for
我想反序列化以下代表表單數據到對象的json字符串。 原始對象包含List元素(使用Razor渲染)
{
"Office":"10649273-8412-4ac0-9109-085b04b49964",
"SearchItemList[0].Column":"Account",
"SearchItemList[0].Operation":"0",
"SearchItemList[0].Value":"be5a36a7-c301-44d7-8d40-85e9637b5b14",
"SearchItemList[1].Column":"",
"SearchItemList[1].Operation":"0",
"SearchItemList[1].Value":"",
"SearchItemList[2].Column":"",
"SearchItemList[2].Operation":"0",
"SearchItemList[2].Value":"",
"SearchItemList[3].Column":"",
"SearchItemList[3].Operation":"0",
"SearchItemList[3].Value":"",
"SearchItemList[4].Column":"",
"SearchItemList[4].Operation":"0",
"SearchItemList[4].Value":"",
"SearchItemList[5].Column":"",
"SearchItemList[5].Operation":"0",
"SearchItemList[5].Value":""
}
您的問題未指定要反序列化為哪種對象。 如果您不太在意,那么簡單的方法就是將該JSON反序列化為Dictionary<string, string>
。 然后,您可以從中選擇所需的任何鍵-它們將與JSON中的鍵相同。 例如(我在這里使用Json.Net ):
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Console.WriteLine(dict["SearchItemList[0].Column"] + ": " + dict["SearchItemList[0].Value"]);
這將輸出:
Account: be5a36a7-c301-44d7-8d40-85e9637b5b14
但是,我懷疑您真正想要的是將數據恢復為類似於“原始對象”的某種類結構,我認為它看起來像這樣:
class RootObject
{
public string Office { get; set; }
public List<SearchItem> SearchItemList { get; set; }
}
class SearchItem
{
public string Column { get; set; }
public string Operation { get; set; }
public string Value { get; set; }
}
為此,您可以將JSON反序列化為JObject
,然后使用標准System.Linq
方法將其從其轉換為所需的結果:
JObject obj = JObject.Parse(json);
RootObject root = new RootObject
{
Office = (string)obj["Office"],
SearchItemList =
obj.Properties()
.Where(p => p.Name.StartsWith("SearchItemList["))
.Select(p =>
{
var parts = p.Name.Split(new string[] { "[", "]." }, 3, StringSplitOptions.None);
return new
{
Index = int.Parse(parts[1]),
Property = new JProperty(parts[2], p.Value)
};
})
.GroupBy(a => a.Index)
.OrderBy(g => g.Key)
.Select(g => new JObject(g.Select(a => a.Property)).ToObject<SearchItem>())
.ToList()
};
小提琴: https : //dotnetfiddle.net/nQ2D2F
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.