2017-02-06 10 views
0

私は子供のような内部に別のXMLを含むXML文書を作成しようとしています。xmlのXML要素

まずは、いくつかのプロパティを持つFooオブジェクトがあります。私は、XML文書内でこのFooの文字列を使用していくつかのデータを保存する必要があるの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(); 
    } 
} 

:私はこの機能でそれをシリアル化。だから私はこのような別のオブジェクトを持っています:

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

    public string FooString { get; set; } 
} 

私はこのBarオブジェクトをシリアル化し、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または私は何を知っていない...それはまた、Barシリアル化されたXMLでのFooオブジェクトの構造を表示するでしょう?? ..ありがとう!!

答えて

0

xmlにxmlを含める最もよい方法は、クラスにFooStringではなくFooプロパティを設定することです。 xmlを文字列として使用しても、それがまだ有効なxmlであることがわからない場合は、単なる文字列です。 CDATAセクションにあなたのxml + XML文字列のあなたの出力を与える

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をシリアル化できなかった場合、私は、CDataとしてのようなものをFooのをシリアル化するためのアドバイスです

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