2012-06-27 27 views
2

我得到了一個XML輸入字符串,並且想將其反序列化爲部分保留原始XML的對象。如何在XML反序列化期間將XML字符串保留爲字符串字段

<SetProfile> 
    <sessionId>A81D83BC-09A0-4E32-B440-0000033D7AAD</sessionId> 
    <profileDataXml> 
    <ArrayOfProfileItem> 
     <ProfileItem> 
     <Name>Pulse</Name> 
     <Value>80</Value> 
     </ProfileItem> 
     <ProfileItem> 
     <Name>BloodPresure</Name> 
     <Value>120</Value> 
     </ProfileItem> 
    </ArrayOfProfileItem> 
    </profileDataXml> 
</SetProfile> 

類定義:

public class SetProfile 
{ 
    public Guid sessionId; 
    public string profileDataXml; 
} 

我希望反序列化語法類似於

string inputXML = "..."; // the above XML 
XmlSerializer xs = new XmlSerializer(typeof(SetProfile)); 
using (TextReader reader = new StringReader(inputXML)) 
{ 
    SetProfile obj = (SetProfile)xs.Deserialize(reader); 
    // use obj .... 
} 

但XMLSerializer的將拋出一個異常,也不會輸出< profileDataXml>的後代原始XML字符串中的「profileDataXml」字段。

是否有任何方式來實現這樣的反序列化?

回答

3

如果要反序列化爲XML,然後使用XML類型(XElementXmlElement應該工作) - 見下面的代碼。

public class StackOverflow_11234676 
{ 
    const string XML = @"<SetProfile> 
          <sessionId>A81D83BC-09A0-4E32-B440-0000033D7AAD</sessionId> 
          <profileDataXml> 
          <ArrayOfProfileItem> 
           <ProfileItem> 
           <Name>Pulse</Name> 
           <Value>80</Value> 
           </ProfileItem> 
           <ProfileItem> 
           <Name>BloodPresure</Name> 
           <Value>120</Value> 
           </ProfileItem> 
          </ArrayOfProfileItem> 
          </profileDataXml> 
         </SetProfile>"; 

    public class SetProfile 
    { 
     public Guid sessionId; 
     public XElement profileDataXml; 
    } 
    public static void Test() 
    { 
     string inputXML = XML; 
     XmlSerializer xs = new XmlSerializer(typeof(SetProfile)); 
     using (TextReader reader = new StringReader(inputXML)) 
     { 
      SetProfile obj = (SetProfile)xs.Deserialize(reader); 
      Console.WriteLine(obj.profileDataXml); 
     } 
    } 
} 
+0

XElement完美無瑕。謝謝! – detale

0

我會說你可以反序列化這個XML。

這篇文章請看: Attributes That Control XML Serialization

最簡單的方式得到它的工作就是用相反的方法。創建類並應用xml序列化屬性並嘗試序列化,直到獲得與發佈相同的xml結果。一旦你得到相同的XML,你的反序列化就可以工作。

0

我會爲此使用Xml.Linq。

setProfile obj = new setProfile(); 
var doc = XDocument.Parse(yourXml); 
obj.sessionID = doc.Root.Element("sessionID").value; 
obj.profileDataXml = doc.Root.Element("profileDataXml").value;