2017-02-06 3 views
0

Ich versuche, XML-Dokument zu erstellen, das ein anderes XML-Element wie Kind enthält.Xml-Element in Xml

Also zuerst habe ich Objekt Foo, die einige Eigenschaften haben. Ich serialisiert es mit dieser Funktion:

private static string SerializeToString(object dataToSerialize) 
{ 
    var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty }); 
    var serializer = new XmlSerializer(dataToSerialize.GetType()); 
    var settings = new XmlWriterSettings 
    { 
     Indent = true, 
     OmitXmlDeclaration = true 
    }; 
    using (var stream = new StringWriter()) 
    using (var writer = XmlWriter.Create(stream, settings)) 
    { 
     serializer.Serialize(writer, dataToSerialize, emptyNamepsaces); 
     return stream.ToString(); 
    } 
} 

In einer anderen Klasse, wo ich brauche ich keinen Zugriff auf Foo Klasse müssen einige Daten mit diesem Foo String in XML-Dokument zu speichern. So habe ich ein anderes Objekt wie folgt aus:

public class Bar 
{ 
    public int SomeInt { get; set; } 

    public string FooString { get; set; } 
} 

Wenn ich diese Bar Objekt serialisiert und es wie XML-Dokument speichern. Ich bekomme so etwas für FooString-Element.

<FooString> 
     <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;Foo&gt; 
    &lt;Guid&gt;2de0b223-308a-4c90-8dc7-09b48c1f42e6&lt;/Guid&gt; 
    &lt;Id&gt;119&lt;/Id&gt; 
    &lt;Name&gt;Some name&lt;/Name&gt; 
    &lt;Description&gt;SomeDesc..&lt;/Description&gt; 
&lt;/Foo&gt;</string> 
    </FooString> 

Ich verstehe, dass diese HTML-Entitäten (&lt;) sind da, weil seine als String gespeichert. Aber es ist möglich, es ohne diese Zeichen zu speichern? Aber ich habe es nur als String gespeichert, weil ich keinen Zugriff auf die Foo-Klasse habe. Ich weiß also nicht, welche Parameter es haben könnte. Deshalb speichere ich es wie einen String und sende es an die Bar-Klasse. Es ist möglich, es als etwas anderes zu speichern, z.B. XmlElement oder ich weiß nicht, was ... das wird auch die Struktur des Foo-Objekts in Bar serialisiert xml ?? .. Danke !!

Antwort

0

Die beste Möglichkeit, XML in XML zu haben, ist die Foo-Eigenschaft, nicht FooString in Ihrer Klasse. Wenn Sie xml als Zeichenfolge verwenden, können Sie nicht sicher sein, dass es immer noch gültig ist, es ist nur eine Zeichenfolge. Wenn Sie nicht wollen oder können nicht xml als Daten serialisiert werden, würde ich empfehlen Foo als CData serialisiert, so etwas wie:

public class Bar 
{ 
    public int SomeInt { get; set; } 

    [XmlIgnore] 
    public string FooString { get; set; } 
    [XmlElement("FooString")] 
    public XmlCDataSection FooStringCData 
    { 
     get { return new XmlDocument().CreateCDataSection(FooString); } 
     set { FooString = (value != null) ? value.Data : null; } 
    } 
} 

Dass Sie Ausgabe Ihrer xml + xml Zeichenfolge gibt in CDATA-Abschnitt:

<Bar> 
    <SomeInt>1</SomeInt> 
    <FooString><![CDATA[<Z> 
    <A>10</A> 
    <B>12</B> 
</Z>]]></FooString> 
</Bar> 
Verwandte Themen