如何在C#中从Json中删除属性容器?

如何在C#中从Json中删除属性容器?

问题描述:

我有一个JSON包含几个元素的问题,我想转换一些对象的JSON数组而不包含包含元素本身的id。基本上我要的就是这种结构转换:如何在C#中从Json中删除属性容器?

{ 
    "SubscriptionStorages": { 
    "1": { 
     "Type": "subscriberstorage", 
     "SubscriberStorage_Id": 1, 
     "SubscriberStorage_AdminDescription": "JM Basic", 
     "SubscriberStorage_MaxStorage": 268435456000 
    }, 
    "2": { 
     "Type": "subscriberstorage", 
     "SubscriberStorage_Id": 2, 
     "SubscriberStorage_AdminDescription": "JM Standard", 
     "SubscriberStorage_MaxStorage": 536870912000 
    } 
    } 
} 

这个结构:

{ 
    "SubscriptionStorages": [ 
    { 
     "Type": "subscriberstorage", 
     "SubscriberStorage_Id": 1, 
     "SubscriberStorage_AdminDescription": "JM Basic", 
     "SubscriberStorage_MaxStorage": 268435456000 
    }, 
    { 
     "Type": "subscriberstorage", 
     "SubscriberStorage_Id": 2, 
     "SubscriberStorage_AdminDescription": "JM Standard", 
     "SubscriberStorage_MaxStorage": 536870912000 
    } 
    ] 
} 

有没有什么简单的方法来做到这一点? 这是我到目前为止,但它不好... 我在这里错过了什么?

List<string> items = new List<string>(); 
if (itemsList != null) 
{ 
    if (itemsList.Count > 0) 
    { 
     JToken outer = JToken.Parse(jsonBody); 
     foreach (JToken t in outer) 
     { 
      items.Add(t.ToString()); 
     } 
    } 
} 
return items; 
+0

你能减少你的样品JSON到一个小例子(和避免引用它没有明显的理由)?当两个例子比真实时间短的时候,看到两个例子之间的区别要容易得多。 –

+0

你的愿望是我的命令:)完成。 – OrAssayag

+0

由于某种原因,它仍然被引用 - 我会自己解决这个问题。 –

您可以将您的JSON是这样的:

var jo = JObject.Parse(originalJson); 

jo["SubscriptionStorages"] = new JArray(
    jo["SubscriptionStorages"] 
     .Children<JProperty>() 
     .Select(jp => jp.Value) 
); 

var modifiedJson = jo.ToString(); 

小提琴:https://dotnetfiddle.net/9sCx2M