簡體   English   中英

反序列化Razor編碼的表單數據(JSON)用於

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM