2009-07-22 7 views
6

私は非常に特定のデシリアライズする必要があり、以下の例を参照してください。.NET XmlSerializerクラスはInnerXmlを文字列として逆シリアル化できますか?

[Serializable]
public class Person {
public string Name { get; set; }
public string PersonXml { get; set; }
}

と次何をしたいXML

 
<Person> 
    <Name>John</Name> 
    <PersonXml><someXmlFragment>text</someXmlFragment></PersonXml> 
</Person> 

はXmlSerializerクラスです:

私はクラスを次のようしていると言いますPersonXmlプロパティの<PersonXml>要素のInnerXmlを文字列として逆シリアル化します。 私はそれができるかどうか疑問に思っています。

注: 私は<PersonXml>が違法なXMLの文字をエスケープのコンテンツをエンコードすることができます知っているが、私は友好的、より人間の内面XML(& LTを含まないを残すことを好むだろう、とだけ私の終わりをcofuseます他のエンティティユーザ)

答えて

3

IXmlSerializableはいつでも実装でき、XmlReaderで気に入ってください。

+0

右のように私には思われる、私はそのようなパスを考慮しませんでした。 これは間違いなく私の問題を解決しますが、私は安価な解決策を望んでいました:) ありがとう! –

+0

ところで、XMLシリアル化に[Serializable]は必要ありません。 [XmlElemenht( "Name")]も省略できます。この特定のケースでは、XMLSerializerのデフォルト動作が変更されないためです。 –

1

要素には実際にXML要素が含まれていますが、.NETには実際には文字列であることをふりかけることを望みますか?私はこれが標準的なシリアル化によって可能だとは思わない。

ただし、XMLを読み込んでPersonXmlを変換して適切にエスケープし、PersonXmlの内容を新しくエスケープしたデータで置き換えることができます。デシリアライズする前に手動でXMLを操作する必要がありますが、XML要素をPersonXmlの下に置くことができます。

+0

うん、これはあまりにも多くの手間とかなり醜いソリューション:) –

0

XMLをXMLに使用してみませんか? PersonXmlにはXmlElementを使用してください。

XMLがStringと同じであるとふりをするのは、常に悪い考えです。

0

投稿は古いですが、私が解決策を探していて、おそらく私の答えが誰かを助けることができました。

[XmlText] 
public string PersonXml { get; set; } 

についてこれはあなたの問題を解決することはできませんが、おそらくそれは許容代替かもしれない何

私の場合、PersonXmlは、Xmlを必ずしも備えていない「持っていていい」要素です。 PersonXmlにXmlが含まれている場合、[XmlText]はPersonXmlをnullにします。しかし、PersonXmlにXmlのないテキストが含まれている場合、逆シリアル化は正しいです。

私の場合、[XmlText]を除いて、PersonXmlのXmlはPersonXmlより前の要素を正しくデシリアライズしますが、PersonXmlの後の要素は正しくデシリアライズされません。

0

同様の解決策を探しているうちに、私はこの答えに困惑しました。 IXmlSerializableを使用したくありませんでした。

今後この問題が発生する場合は、XmlAnyElement属性を使用してXmlNodeとして内部xmlをシリアル化することができます。その後、XmlNodeを適切に処理してポストしたり、シリアル化を個別に実行したり、必要に応じてxmlのテキストを取得したりすることができます。この例では

public class Person 
{ 

    public string Name { get; set; } 

    [XmlAnyElement] 
    public XmlNode PersonXml { get; set; } 

} 
+0

また、[XmlText]属性をPersonXmlに追加する価値があります。これには、ノードの子であるテキストノードも含まれます – user2346593

関連する問題