У меня есть программа WPF C#, и в какой-то момент мне нужно сериализовать объекты в XML. В других местах, я использую это:Сериализуйте объект в XML WITHIN для родительского элемента
TextWriter writer = new StreamWriter(xmlFilePath);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MYOBJECT_TYPE));
try
{
xmlSerializer.Serialize(writer, MYOBJECT);
}
catch (Exception ex)
{
MessageBox.Show("Exception occured while writing to Xml" + ex.Message);
}
finally
{
writer.Close();
}
Это фантастика, но это означает, что я должен иметь отдельный файл XML для каждого объекта я хочу сериализации. Как использовать этот метод (с наименьшим количеством изменений) для сериализации объекта в XML В том случае, если родительский элемент? Таким образом, когда я хочу десериализовать объект позже, я могу просто найти элемент, который я хочу, и десериализировать все внутри этого элемента.
В соответствии с просьбой, вот CreateDefaultXml();
:
static void CreateDefaultXml()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<StoredObjects></StoredObjects>");
XmlNode root = doc.DocumentElement;
try
{
doc.Save(xmlFilePath);
}
catch (Exception ex)
{
Console.WriteLine("Exception occured while creating Xml" + ex.InnerException);
}
}
EDIT:
В настоящее время, это то, что у меня есть (но он бросает исключение There was an error generating the XML document.
)
if (!File.Exists(xmlFilePath))
CreateDefaultXml();
XDocument doc = XDocument.Load(xmlFilePath);
var element = doc.Descendants("Object").Where(x => x.Attribute("Name").Value.Equals("objectName")).SingleOrDefault();
if (element == null)
{
element = new XElement("Object", new XAttribute("Name", objectName));
doc.Element("StoredObjects").Add(element);
}
XmlWriter writer = element.CreateWriter();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MYOBJECT_TYPE));
try
{
xmlSerializer.Serialize(writer, MYOBJECT);
}
catch (Exception ex)
{
MessageBox.Show("Exception occured while writing to Xml: " + ex.Message);
}
finally
{
writer.Close();
doc.Save(xmlFilePath);
}
1) Что такое 'shape'? В строке 'shape.CreateWriter();' она не определена. 2) Можете ли вы поделиться 'CreateDefaultXml(); '? – dbc
@dbc Извините. Я обновил вопрос – derekantrican
Я изменил 'MessageBox.Show', чтобы показать' ex.InnerException' и получить 'System.InvalidOperationException: WriteStartDocument не может быть вызван для писателей, созданных с ConformanceLevel.Fragment.' – derekantrican