Мне нравится XmlSerializer
, из-за его работы с огнем и забытьем. Я могу дать XmlSerializer
объект для сериализации и файл для сериализации, а XmlSerializer
будет сортировать имена и значения свойств.Сериализация объектов в хранилище XML
XmlWriter xmlWriter = XmlWriter.Create(projectPath + "\\" + m_projectDescriptionFileName); // create new project description file (XML)
XmlSerializer xmlSerializer = new XmlSerializer(typeof(CustomerContactInfoViewModel));
xmlSerializer.Serialize(xmlWriter, contactInfo);
xmlWriter.Close();
Мне нравится LINQ to XML для его навигации. Вот пример метода для редактирования объекта, который хранится в XML (адаптировано из Greg's blog. Там также фрагменты кода для вставки и удаления.)
public void EditBilling(Billing billing)
{
XElement node = m_billingData.Root.Elements("item").Where(i => (int)i.Element("id") == billing.ID).FirstOrDefault();
node.SetElementValue("customer", billing.Customer);
node.SetElementValue("type", billing.Type);
node.SetElementValue("date", billing.Date.ToShortDateString());
node.SetElementValue("description", billing.Description);
node.SetElementValue("hours", billing.Hours);
m_billingData.Save(HttpContext.Current.Server.MapPath("~/App_Data/Billings.xml"));
}
Как вы можете видеть, имена и значения свойств записываются в код, в отличие от XmlSerializer
.
Я хотел бы иметь возможность хранить несколько объектов разных типов в одном XML-файле (добавляя их в разное время, а не все сразу). Я хотел бы иметь возможность десериализовать их по одному. Я хотел бы обновить их по одному.
- Есть ли способ объединить навигацию по LINQ с удобством и безопасностью
XmlSerializer
? - Это
XmlSerializer
правильный инструмент для этого? - Есть ли что-то лучше (не доработав надлежащую базу данных)?
- Я ищу что-то, что происходит под другим именем?
Любые предложения, идеи или ссылки действительно оценены!
Я что-то упускаю, или ADO.NET вам не хватает? –
@WesleyLong Возможно, это я чего-то не хватает, и ваш комментарий обращается к моему последнему вопросу «* ищет что-то, что происходит под другим именем?» «Тем временем я пойду, что ADO.NET может сделать для XML. –
Я просто угадываю здесь, но не смог создать baseObjectXmlElement, который хранит Xml в виде строки/данных и typedescriptorstring? так что вы можете хранить что-либо в разделе данных и десериализовать его с помощью typestring –