2016-11-15 8 views
0

XML文書をシリアル化しようとしていますが、ノードの1つが問題になります。私のXML文書は:C#でリッチテキストをシリアライズ

<?xml version="1.0" encoding="utf-8"?> 
<item id="tcm:38-21324" title="Accessibility Product Accessibility content - 11-INTL" type="Component"> 
    <title>Accessibility Product Accessibility content - 11-INTL</title> 
    <generalContent xmlns="uuid:bc85180b-db18-412f-b7ad-36a25ff4012f"> 
    <title>Produkttilgængelighed</title> 
    <style xlink:href="tcm:38-3149-1024" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Horizontal Rule (Blue)">Horizontal Rule (Blue)</style> 
    <image> 
     <image xlink:type="simple" xlink:href="tcm:38-33683" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Feature-Image_D_527478227_kp" /> 
     <smallImage xlink:type="simple" xlink:href="tcm:38-33684" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Feature-Image_M_527478227_kp" /> 
     <retinaImage xlink:type="simple" xlink:href="tcm:38-33685" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Feature-Image_T_527478227_kp" /> 
     <altText>Kvinde med briller kigger på en bærbar computer</altText> 
     <title>Kvinde med briller kigger på en bærbar computer</title> 
     <imagePosition>Right</imagePosition> 
    </image> 
    <description> 
     <hr class="mainRow__hr mainRow__hr--bbOrange" xmlns="http://www.w3.org/1999/xhtml" /> 
     <p xmlns="http://www.w3.org/1999/xhtml">Vores produkter er designet og udviklet</p> 
    </description> 
    </generalContent> 
</item> 

これは私のモデルです。これは、説明フィールド以外の他のフィールドとうまく動作します。

[Serializable()] 
    [XmlRoot(ElementName = "generalContent", Namespace = "uuid:bc85180b-db18-412f-b7ad-36a25ff4012f")] 
    public class GeneralContent 
    { 
     [XmlElement(ElementName = "title")] 
     public string Title { get; set; } 

     [XmlElement(ElementName = "image")] 
     public Image Image { get; set; } 

     [XmlElement(ElementName = "description")] 
     public string Description { get; set; } 

    } 

シリアル化を行うコードは一般的なもので、他のすべてのモデルで動作します。

public static T MapXmlToType<T>(XElement xmlData) where T:ITridionModel 
    { 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
     return (T) xmlSerializer.Deserialize(xmlData.CreateReader()); 
    } 

"description"ノードを文字列として取得する必要があります。基本的にはリッチテキストフィールドであり、スタイリングの値も含めて全体の内容が必要です。しかし、今のところこのモデルは、説明ノードにSystem.InvalidOperationExceptionを投げています。どのように私はこれをシリアル化できますか?

+0

コードのシリアル化/シリアル化解除コードを記載してください。あなたはシリアル化(XMLを書く)またはデシリアライズ(XMLを読む)しようとしていますか? – wdosanjos

+0

説明プロパティの直列化を手作業で実装し、xmlまたは特殊文字(IXmlSerializableを参照) – Sebi

+0

ermと解釈されるすべてのrtfタグを無効にする必要があると思います。XMLがシリアル化されています。 – Jodrell

答えて

-1

私は同じ問題を抱え、非常に簡単な回避策を使用しました。 GZipStreamまたはBase64のような別の方法を使用して、RTFタグ付きテキストを暗号化します。私は問題なく使用しましたが、安全であるかどうか、あるいは他の問題を引き起こすかどうかはわかりません。

ます。また、このように自動的に変換をサポートするために、モデル内のプロパティを書き込むことができます。

[Serializable()] 
    [XmlRoot(ElementName = "generalContent", Namespace = "uuid:bc85180b-db18-412f-b7ad-36a25ff4012f")] 
    public class GeneralContent 
    { 
     [XmlElement(ElementName = "title")] 
     public string Title { get; set; } 

     [XmlElement(ElementName = "image")] 
     public Image Image { get; set; } 

     [XmlIgnore] 
     public string Description { get; set; } 

     [XmlElement(ElementName = "description")] 
     public string EncryptedDescription 
     { 
      get { return Encrypt(Description); } 
      set { Description = Decrypt(value); } 
     } 
    } 

は、あなたがする必要があるすべては次のように説明を変更するモデルであることが

+0

投票の際にコメントを残して丁寧です! – Emad

0

をお役に立てば幸いです。

[XmlElement(ElementName = "description")] 
    public XElement Description { get; set; } 

    public string DescriptionAsText => Description.ToString(); 
関連する問題