2016-12-21 1 views
1

現在、モデルのmy textプロパティに特定のノード(text)ノードのすべての内部テキストが含まれるようにクラスを変更しようとしています。C#XML逆シリアル化。すべての内部テキストをノードから文字列プロパティに読み込みます

私に問題を与えているXMLの例は次のとおりです。現在、私のモデルのルックスを

"<content ID="ID0EAAKACA">No Reason for Visit was given.</content>"

  <component> 
       <section> 
        <title>Reason for Visit</title> 
        <text> 
         <content ID="ID3EZZKACA">No Reason for Visit was given.</content> 
        </text> 
       </section> 
      </component> 

私の目標は、次の文字列を持っている私のモデルのtextプロパティです以下のようになります。

public partial class ComponentSection { 
    //other model properties here 
    private string textField; 

    [System.Xml.Serialization.XmlTextAttribute()] 
    public string text { 
     get { 
      return this.textField; 
     } 
     set { 
      this.textField = value; 
     } 
    } 
    //getters/setters for other properties here 
} 

だから、私は現在、[System.Xml.Serialization.XmlTextAttribute()]注釈を使用してこれを達成しようとしていますが、XMLを逆シリアル化すると、テキストプロパティは常にnullになります。

すべてのご協力をいただきありがとうございます。

+0

私は通常、XMLを*必要に応じて*シリアル化するのが簡単です。これで、デシリアライズは簡単です。 –

+1

Linq2Xml 'var elem = XDocument.Load(filename).XPathSelectElement(" // text ");' –

+0

@残念ながら、これは私のシナリオでは妥当なアプローチではありません。私は、さまざまなソースから巨大なXML文書を与えられています。このXMLにシリアル化しようとすると余分な時間がかかります。私は.xsdから自動的に生成されたクラスを持っています – GregH

答えて

2

私がコメントで言ったように、から始まるシリアル化はしばしばより簡単です。ここでは、上記のXMLのためのいくつかのクラス

public sealed class component 
{ 
    public section section { get; set; } 
} 
public sealed class section 
{ 
    public string title { get; set; } 
    public text text { get; set; } 
} 
public sealed class text 
{ 
    public content content { get; set; } 
} 
public sealed class content 
{ 
    public string text { get; set; } 
    public string ID { get; set; } 
} 

control XML serializationコンテンツクラスを変更し、その後、次のとおりです。

public sealed class content 
{ 
    [XmlText] 
    public string text { get; set; } 
    [XmlAttribute] 
    public string ID { get; set; } 
} 

あなたは、次のコードでインスタンスをシリアル化することができます

 static string ToXmlString<T>(T t) 
     { 
      var serializer = new XmlSerializer(t.GetType()); 
      using (var sw = new System.IO.StringWriter()) 
      { 
       serializer.Serialize(sw, t); 
       return sw.ToString(); 
      } 
     } 
     static void Main(string[] args) 
     { 
      var c = new component { section = new section { 
          title = "Reason for Visit", text = new text { content = new content { 
          ID = "ID3EZZKACA", text = "No Reason for Visit was given." } } } }; 

      string s = ToXmlString(c); 
      Console.WriteLine(s); 
     } 

結果は次のとおりです。

<?xml version="1.0" encoding="utf-16"?> 
<component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http 
://www.w3.org/2001/XMLSchema"> 
    <section> 
    <title>Reason for Visit</title> 
    <text> 
     <content ID="ID3EZZKACA">No Reason for Visit was given.</content> 
    </text> 
    </section> 
</component> 
+0

落札件数はどうなっていますか? –

関連する問題