#c# #silverlight #serialization #xml-serialization #deserialization
#c# #silverlight #сериализация #xml-сериализация #десериализация
Вопрос:
Сейчас я некоторое время искал учебные пособия и сообщения о том, как десериализовать сложный XML-документ в объекты и использовать его в приложении silverlight. Я видел много руководств и сообщений от 2008, 2009 и многие из них явно не работают.. Довольно легко работать с Hello World или классом «Person», но я не могу найти ничего хорошего о некоторых сложных XML-файлах и objectaction для данных. Проблема не в 3 строках кода синтаксического анализа, но как выглядит код c #? Как мне создать все эти классы? Как работать с этими объектами?
Давайте представим, что вы получаете из веб-службы поток или у вас есть строка в вашей логике, подобная этой. У вас есть пространства имен, атрибуты и 6 дочерних узлов.
<?xml version="1.0" encoding="UTF-8"?>
<om:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:om="http://www.opengis.net/om/1.0">
<a name="a1">
<b>
<c id="1" name="C1">
<d id="1" name="D1">My name is D1</d>
<d id="2" name ="D2">My name is D2</d>
<e>
<f>this is f1</f>
</e>
</c>
<c id="2" name="C2">
<d id="3" name="D3">My name is D3</d>
<e>
<f>this is f2</f>
</e>
</c>
</b>
<b>
<c id="3" name="C3">
<d id="4" name="D5">My name is D4</d>
<d id="5" name="D5">My name is D5</d>
<d id="6" name="D6">My name is D6</d>
<d id="7" name="D7">My name is D7</d>
<e>
<f>this is f3</f>
</e>
</c>
</b>
</a>
</om:root>
1) Есть ли какой-либо веб-сайт, который может создавать классы и код c #, чтобы иметь возможность работать / хранить данные в xml? Вы публикуете свой XML-файл и получаете исходный код для своих классов c #. Что-то вроде www.json2csharp.com
2) Как будут выглядеть мои классы, свойства и т. Д.? Я хотел бы увидеть один стандартный современный современный способ работы со свойствами, атрибутами, списками и т. Д. Полный код с «использованием xxx»! Пожалуйста, давайте использовать стандартный класс сериализатора, который будет работать с Silverlight!
3) Некоторое действие с объектом. Нравится
- дайте мне все nom: c в списке
- дайте мне значение из f в nom: c id=»2″
- поместите все b в список
- дайте мне все значения атрибутов из name=»» ИЗ всех тестовых: общих узлов
просто несколько последовательных практических запросов, а не тех, которые easymode get.me.person.name или book.name
редактировать: Хорошо, может быть, это сложно. Может кто-нибудь опубликовать несколько ссылок, где есть хотя бы какой-то учебник или блог с некоторыми примерами?
Комментарии:
1. это сложно или это просто не распространенная проблема??
Ответ №1:
Для генерации классов c # из xml вы можете использовать инструмент Microsoft xsd.exe .
Комментарии:
1. Я использовал это, но я не настолько счастлив. Было бы здорово найти какое-нибудь онлайн-решение.
Ответ №2:
Я сам новичок, но на вашем месте я бы обязательно заглянул в класс System.Xml.Linq. Когда вы уже определили свой класс, десериализовать ваш документ должно быть довольно просто. Внизу я вставляю фрагмент из моего кода, который делает именно то, что вы хотите. Это для WP7, но, кроме части IsolatedStorage, все должно быть одинаковым.
ItemTemplate item = new ItemTemplate();
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("/Items.xml", FileMode.Open))
{
XElement doc = XElement.Load(stream);
IEnumerable<XElement> itemTest = from el in doc.Elements("item")
where (string)el.Element("id") == itemId
select el;
foreach (XElement el in itemTest)
{
item.ItemContent = el.Element("content").Value;
item.Status = Convert.ToBoolean(el.Element("status").Value);
item.Notes = el.Element("notes").Value;
item.Location = el.Element("location").Value;
item.Deadline = Convert.ToDateTime(el.Element("deadline").Value);
}
}
}
Комментарии:
1. Привет, спасибо за ваш код, но я не хочу использовать здесь LINQ. Просто классы и десериализация.