2017-02-06 18 views
0

Я пытаюсь создать XML-документ, содержащий другой xml внутри такого же дочернего.Xml-элемент в xml

Так что прежде всего у меня есть объект Foo, который обладает некоторыми свойствами. Я сериализовать его с помощью этой функции:

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(); 
    } 
} 

В другом классе, где я не имею доступ к классу Foo мне нужно, чтобы сохранить некоторые данные этой строки Foo внутри XML-документа. Итак, у меня есть еще один объект:

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

    public string FooString { get; set; } 
} 

Когда я сериализую этот объект и сохраняю его как документ xml. Я получаю что-то вроде этого для элемента FooString.

<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> 

Я понимаю, что этот HTML символьные объекты (&lt;) есть, так как его сохранить как строки. Но можно ли сохранить его без этих символов? Но я только сохранил его как строку, потому что у меня нет доступа к классу Foo .. поэтому я не знаю, какие параметры у него могли бы быть. Поэтому я сохраняю его как строку и отправляю его в класс Bar. Можно сохранить его как что-то еще, например, например. XmlElement или я не знаю, что ..., что также покажет структуру объекта Foo в сериализованном XML-файле? .. Спасибо!

ответ

0

Лучший способ иметь xml в xml должен иметь свойство Foo, а не FooString в вашем классе. Если вы используете xml в качестве строки, вы не можете быть уверены, что она по-прежнему действительна xml, это просто строка. Если вы не хотите или не может сериализовать XML как данные, я бы посоветовал сериализовать Foo, как CData, что-то вроде:

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; } 
    } 
} 

Это дает вам выход вашего XML + XML строки в разделе CDATA:

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