Я пытаюсь заполнить Treeview, используя возвращаемые данные из вызова веб-службы. Я использовал Restsharp для вызова и возврата данных. Тем не менее, я действительно пытаюсь понять, как передать его в правильное дерево. Я пытался использовать это руководство CodeProject, но мне не удалось заставить его работать, и я создал беспорядок моего кода, пытаясь его адаптировать. Любая помощь или направление были бы весьма признательны.
XML возвращается как:
<ListItems xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Items>
<ListItem>
<ID>n0z5tVQXsbTgB8PUp7tE5$p5shhQOV3s5Y</ID>
<URI>https://URL/n0z5tVQXsbTgB8PUp7tE5$p5shhQOV3s5Y</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>BATMAN</Name><ParentID xsi:nil="true" />
<Level1Code>BATMAN</Level1Code><Level2Code xsi:nil="true" /><Level3Code xsi:nil="true" />
<Level4Code xsi:nil="true" /><Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" />
<Level7Code xsi:nil="true" /><Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" />
<Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbTnByah$pfDj0gDjm$sMYSfFYB</ID>
<URI>https://URL/n0z5tVQXsbTnByah$pfDj0gDjm$sMYSfFYB</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>Rig Move Project Management</Name>
<ParentID>n0z5tVQXsbTgB8PUp7tE5$p5shhQOV3s5Y</ParentID><Level1Code>BATMAN</Level1Code>
<Level2Code>RMPM</Level2Code><Level3Code xsi:nil="true" /><Level4Code xsi:nil="true" />
<Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" />
<Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbT76YjU9r5rbMbo526tKB7kT</ID>
<URI>https://URL/n0z5tVQXsbT76YjU9r5rbMbo526tKB7kT</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>14-RMPM-AUG</Name>
<ParentID>n0z5tVQXsbTnByah$pfDj0gDjm$sMYSfFYB</ParentID><Level1Code>BATMAN</Level1Code>
<Level2Code>RMPM</Level2Code><Level3Code>14-RMPM-AUG</Level3Code><Level4Code xsi:nil="true" />
<Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" />
<Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbT98mCa24ijg8oKVUXUu9voE</ID>
<URI>https://URL/n0z5tVQXsbT98mCa24ijg8oKVUXUu9voE</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>14-RMPM-SEP</Name>
<ParentID>n0z5tVQXsbTnByah$pfDj0gDjm$sMYSfFYB</ParentID><Level1Code>BATMAN</Level1Code>
<Level2Code>RMPM</Level2Code><Level3Code>14-RMPM-SEP</Level3Code><Level4Code xsi:nil="true" />
<Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" />
<Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbTzkVY2DmlIKqTJQ$ssiU$sZhq</ID>
<URI>https://URL/n0z5tVQXsbTzkVY2DmlIKqTJQ$ssiU$sZhq</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>14-RMPM-DEC</Name>
<ParentID>n0z5tVQXsbTnByah$pfDj0gDjm$sMYSfFYB</ParentID><Level1Code>BATMAN</Level1Code>
<Level2Code>RMPM</Level2Code><Level3Code>14-RMPM-DEC</Level3Code><Level4Code xsi:nil="true" />
<Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" />
<Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbT3akVrmqiTRzuqyw4bvZhNj</ID>
<URI>https://URL/n0z5tVQXsbT3akVrmqiTRzuqyw4bvZhNj</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>BOONE</Name><ParentID xsi:nil="true" />
<Level1Code>BOONE</Level1Code><Level2Code xsi:nil="true" /><Level3Code xsi:nil="true" />
<Level4Code xsi:nil="true" /><Level5Code xsi:nil="true" /><Level6Code xsi:nil="true" />
<Level7Code xsi:nil="true" /><Level8Code xsi:nil="true" /><Level9Code xsi:nil="true" />
<Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbTJzA$pdmVRdjjTNL8ZgV2CtV</ID>
<URI>https://URL/n0z5tVQXsbTJzA$pdmVRdjjTNL8ZgV2CtV</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>TEST</Name>
<ParentID>n0z5tVQXsbT3akVrmqiTRzuqyw4bvZhNj</ParentID><Level1Code>BOONE</Level1Code><Level2Code>TEST</Level2Code>
<Level3Code xsi:nil="true" /><Level4Code xsi:nil="true" /><Level5Code xsi:nil="true" />
<Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" /><Level8Code xsi:nil="true" />
<Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
<ListItem>
<ID>n0z5tVQXsbTJzA$pdmVRdjjTNL8ZgV2CtV</ID>
<URI>https://URL/n0z5tVQXsbTJzA$pdmVRdjjTNL8ZgV2CtV</URI>
<ListID>nnK2NXzfmoCyTPE0yck44Nswy1Ho964Lo</ListID><Name>TEST1</Name>
<ParentID>n0z5tVQXsbT3akVrmqiTRzuqyw4bvZhNj</ParentID><Level1Code>BOONE</Level1Code><Level2Code>TEST1</Level2Code>
<Level3Code xsi:nil="true" /><Level4Code xsi:nil="true" /><Level5Code xsi:nil="true" />
<Level6Code xsi:nil="true" /><Level7Code xsi:nil="true" /><Level8Code xsi:nil="true" />
<Level9Code xsi:nil="true" /><Level10Code xsi:nil="true" />
</ListItem>
</Items>
<NextPage xsi:nil="true" />
</ListItems>
Так что это должно получиться:
-BATMAN
---RMPM
------ 14-RMPM-август
------ 14-RMPM-сентябрь
------ 14-RMPM-декабрь
-BOONE
---TEST
---TEST 1
То, что я сделал, это взять ваш xml и использовать функцию " Paste Special → Paste XML As Class
для VS 2013, чтобы создать класс из XML. Затем я использую XML-сериализатор для десериализации XML в объект, который я могу использовать. Затем я создал узлы дерева для каждого из элементов и создал соответствующую структуру и добавил корни в Tree View.
Он делает несколько предположений:
string xml = ""; // Your big XML string
StringReader sr = new StringReader(xml);
XmlSerializer xs = new XmlSerializer(typeof(ListItems));
ListItems listItems = (ListItems)xs.Deserialize(sr);
Dictionary<string, TreeNode> nodes = new Dictionary<string, TreeNode>();
foreach (var item in listItems.Items)
{
TreeNode node;
nodes.Add(item.ID, node = new TreeNode(item.Name));
if (item.ParentId != null)
nodes[item.ParentId].Nodes.Add(node);
else
treeView1.Nodes.Add(node);
}
/* Edited this out, can do in only one loop
foreach (var item in listItems.Items)
{
var children = from i in listItems.Items where i.ParentID == item.ID select i;
foreach (var child in children)
{
nodes[item.ID].Nodes.Add(nodes[child.ID]);
}
if (item.ParentID==null)
treeView1.Nodes.Add(nodes[item.ID]);
}
*/
foreach
. Используйте ParentId элемента, чтобы получить узел родителя. Отредактированный пост, так как не хотел копировать вашу сериализацию.