2016-04-18 8 views
1

Ich habe folgende in einigen json ich von XML konvertiert haben:Json Daten entfernen unerwünschte Elemente

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

Das waren einige xml eine Anwendung aus einer Dropdown erzeugt. Ich will es dies in C# konvertieren:

"ForSaleStatus":"2" 

Hier ist der Code habe ich bisher:

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); 

jemand denken kann eine Möglichkeit, die json der Umwandlung oder bin ich weg besser geht zurück an das XML und daran arbeiten?

Die XML sieht wie folgt aus:

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

können Sie die ursprüngliche XML aus der Anwendung zur Verfügung stellen? – Xiaoy312

+0

haben den Beitrag bearbeitet. Ich erkannte, dass dies erforderlich war, nachdem ich es zum ersten Mal eingereicht hatte. Vielleicht hast du während der Bearbeitung kommentiert? Kannst du es jetzt sehen? Ich denke, es ist wahrscheinlich vernünftiger, sie aus dem XML zu streichen? –

Antwort

1

Es wäre einfacher, die Werte zu extrahieren Sie wollen und bauen gerade die json davon:

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

Wenn das nicht für Sie kompilieren verwenden Sie diese ältere Syntax:

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

Edit: den Fall, dass Sie die Werte aus allen Einzelteilen:

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

Vielen Dank, ja, das wird tun. Ich werde meinen Code überarbeiten und einfach die Werte entfernen, die ich möchte, und es so aufbauen. Prost. –

+0

Dies ist nur eine hartcodierte Lösung für dieses Problem. Übrigens, enthält der 'ForSaleStatus' mehr als 1 Artikel und du brauchst alle? – Xiaoy312

+0

Danke, das ist großartig. ForSaleStatus hat immer nur ein einzelnes Element, da es sich um eine einzelne Dropdown-Liste handelt, die die Daten generiert. In diesem Job macht es keinen Sinn, den Code zu elegant zu machen, weil ich nur einen einmaligen Treffer brauche, um die Daten zu extrahieren. Aber vielen Dank für die Hilfe. –

Verwandte Themen