Próbuję serializować klasę, pisząc do pliku XML jako wiele fragmentów, tj. Zapisując każdy obiekt klasy jako pojedynczy fragment, bez nagłówek/root XML. Poniżej znajduje się przykładowy kod:.net XmlSerialize throws "WriteStartDocument nie może zostać wywołany na pisarzach utworzonych za pomocą ConformanceLevel.Fragment"
[Serializable]
public class Test
{
public int X { get; set; }
public String Y { get; set; }
public String[] Z { get; set; }
public Test()
{
}
public Test(int x, String y, String[] z)
{
X = x;
Y = y;
Z = z;
}
}
class Program
{
static void Main(string[] args)
{
Test t1 = new Test(1, "t1", new[] { "a", "b" });
Test t2 = new Test(2, "t2", new[] { "c", "d", "e" });
XmlSerializer serializer = new XmlSerializer(typeof(Test));
//using (StreamWriter writer = new StreamWriter(@"f:\test\test.xml"))
{
XmlWriter xmlWriter = XmlWriter.Create(@"f:\test\test.xml",
new XmlWriterSettings()
{ConformanceLevel = ConformanceLevel.Fragment,
OmitXmlDeclaration = true,
Indent = true});
serializer.Serialize(xmlWriter, t1);
serializer.Serialize(xmlWriter, t2);
xmlWriter.Close();
}
}
}
W pierwszym zaproszeniu do serializacji, otrzymuję wyjątek:
WriteStartDocument cannot be called on writers created with ConformanceLevel.Fragment
Co ja tu brakuje?
Wielki, który po prostu działa dobrze. Nie mam nic przeciwko pustemu komentarzowi w pliku – sppc42
Należy pamiętać, że właściwość ['NamespaceHandling'] (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.namespacehandling.aspx) istnieje w .NET 4.0 i nowszych. –
Nie można nic napisać z 'xmlW.WriteWhitespace (" ")' – oleksa