2016-04-18 4 views
1

У меня есть следующие в какой-то JSON я преобразованного из XML:данные JSon удалить нежелательные элементы

"ForSaleStatus":{"items":{"item":{"label":"Not For Sale","value":"2"}}} 

Это было некоторой XML-приложение, генерируется из выпадающего списка. Я хочу, чтобы преобразовать его в это в C#:

"ForSaleStatus":"2" 

Вот код, который я до сих пор:

var xml = i; 
var root = XElement.Parse(xml); 

// remove ALL empty elements such as <items/> 
root.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove(); 

// convert the node to JSON for easier processing 
var json = JsonConvert.SerializeXNode(root); 

Может кто-нибудь придумать способ преобразования JSON или я лучше вернуться к XML и работать над этим?

XML-выглядит следующим образом:

<ForSaleStatus> 
    <items> 
    <item> 
     <label>Not For Sale</label> 
     <value>2</value> 
    </item> 
    </items> 
</ForSaleStatus> 
+0

Можете ли вы предоставить исходный xml из приложения? – Xiaoy312

+0

отредактировали это сообщение. Я понял, что это было необходимо после того, как я впервые представил его. Возможно, вы прокомментировали, когда я редактировал? Вы видите это сейчас? Думаю, более разумно лишить их из XML? –

ответ

1

Было бы легче извлечь нужные значения и просто построить JSON от этого:

var json = JsonConvert.SerializeObject(new Dictionary<string, string> 
{ 
    [root.Name.ToString()] = root.XPathSelectElement("items/item/value").Value 
}); 

Если это не компилируется для вас используйте этот старшую синтаксис:

var json = JsonConvert.SerializeObject(new Dictionary<string, string> 
{ 
    { root.Name.ToString(), root.XPathSelectElement("items/item/value").Value } 
}); 

Редактировать: если вам нужны значения из всех элементов:

var json = JsonConvert.SerializeObject(root 
    .XPathSelectElements("items/item") 
    .ToDictionary(
     x => x.XPathSelectElement("label").Value, 
     x => x.XPathSelectElement("value").Value 
    )); 
+0

Большое спасибо, да, это будет делать. Я переработаю свой код и просто вычеркиваю нужные значения и создаю его таким образом. веселит. –

+0

Это всего лишь жестко запрограммированное решение только для этой проблемы. Btw, 'ForSaleStatus' содержит более 1 элемента, и вам нужны все они? – Xiaoy312

+0

Спасибо, это здорово. ForSaleStatus имеет только один элемент, потому что это единственный выпадающий список выбора, который генерирует данные. В этой работе нет смысла делать код слишком изящным, потому что все, что мне нужно, - это однократное попадание, чтобы извлечь данные. Но большое спасибо за помощь. –

Смежные вопросы