私はWPF C#プログラムを手に入れました。そして、ある時点でオブジェクトをXMLにシリアル化する必要があります。他の場所では、私はこれを使用してきた:オブジェクトを親要素内のXMLにシリアル化
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.CreateWriter();'行では未定義です。 2) 'CreateDefaultXml();'を共有できますか? – dbc
@dbc申し訳ありません。私は質問を更新しました – derekantrican
'MessageBox.Show'を変更して' ex.InnerException'を表示し、 'System.InvalidOperationException:ConformanceLevel.Fragmentで作成されたライターに対してWriteStartDocumentを呼び出せません.' – derekantrican