2014-01-13 33 views
0

我想轉換爲具有值的對象字符串。我的意思是讓我們說我有一個具有XML代碼中像字符串:將字符串轉換爲Windows 8.1商店應用程序c中的對象#

代碼段:

String response [email protected]"<?xml version=""1.0"" encoding=""utf-8""?>\r\n 
<Request>\r\n 
<TransactionType>ADMIN</TransactionType>\r\n 
<Username>abc</Username>\r\n 
<Password>def</Password>\r\n 
</Request>"; 

我有了它在XML中提到的一樣

類的所有屬性的類ResponseClass

String UserName; 

String Password; 

String Transaction; 

如何設置所有值我n ResponseClass對象沒有字符串解析? 我已經嘗試過使用序列化,但由於API的限制,它在Windows 8.1應用商店項目中給了我一些問題。

有什麼辦法讓它排序?

感謝

+1

任何這些應該幫助:從字符串反序列化XML ](http://stackoverflow.com/questions/14645964/deserializing-xml-from-string),[C# - 將XML字符串轉換爲對象](http://stackoverflow.com/questions/3187444/c-sharp-convert -xml-string-to-object)和[將XML字符串反序列化到C#對象中](http://stackoverflow.com/questions/14722492/xml-string-deserialization -INTO-C鋒利物體)。如果沒有,你應該可以使用[XElement.Parse](http://msdn.microsoft.com/en-us/library/bb468714(v = vs.110).aspx)和LINQ進行遍歷。 – valverij

+0

我很好奇你使用XmlSerialization時遇到的問題 - 不應該支持Windows 8.1 App Store項目嗎? – Filburt

回答

1

下面是使用XDocument.Parse(String)System.Xml.Linq一個非常簡單的方法:

String response = @"<?xml version=""1.0"" encoding=""utf-8""?> 
    <Request> 
     <TransactionType>ADMIN</TransactionType> 
     <Username>abc</Username> 
     <Password>def</Password> 
    </Request>"; 

var xml = XDocument.Parse(response); 
var request = xml.Element("Request"); 

var responseObject = new ResponseClass() 
{ 
    UserName = request.Element("Username").Value, 
    Password = request.Element("Password").Value, 
    Transaction = request.Element("TransactionType").Value, 
}; 

或者,如果Windows應用商店的應用程序支持的話,你可以使用內置的XmlSerializer(如果沒有,你可以忽略此位)。只是用XmlRootXmlElement屬性這樣定義類:

[XmlRoot("Request")] 
public class ResponseClass 
{ 
    [XmlElement("Username")] 
    public String UserName { get; set; } 

    [XmlElement("Password")] 
    public String Password { get; set; } 

    [XmlElement("TransactionType")] 
    public String Transaction { get; set; } 
} 

,然後使用創建一個XmlSerializerStringReader到反序列化:

String response = @"<?xml version=""1.0"" encoding=""utf-8""?> 
    <Request> 
     <TransactionType>ADMIN</TransactionType> 
     <Username>abc</Username> 
     <Password>def</Password> 
    </Request>"; 

var serializer = new XmlSerializer(typeof(ResponseClass)); 
ResponseClass responseObject; 

using (var reader = new StringReader(response)) 
{ 
    responseObject = serializer.Deserialize(reader) as ResponseClass; 
} 
0

除非經一些串行你將不得不手動將其代碼以匹配生成的XML。序列化和反序列化齊頭並進。因此,如果你的XML文件是串行器的產品,那麼最有可能是一個解串器。如果您可以選擇重新創建這個xml文件,那麼可以使用XmlSerializer,這樣您可以反序列化。

0

如果你不想使用XmlSerializer thenThis有點醜陋,但希望這將有助於你的要求。我已經爲我的一些用途實施了類似的東西。首先做一個擴展方法。

public static class TextUtil 
{ 
    public static string JustAfter(this string Str, string Seq, string SeqEnd) 
    { 
     string Orgi = Str; 
     try 
     { 
      int i = Str.IndexOf(Seq); 

      if (i < 0) 
       return null; 

      i = i + Seq.Length; 

      int j = Str.IndexOf(SeqEnd, i); 
      int end; 

      if (j > 0) end = j - i; 
      else end = Str.Length - i; 

      return Orgi.Substring(i, end); 
     } 
     catch (Exception) 
     { 
      return String.Empty; 
     } 
    } 
} 

現在您可以按照顯示的方式使用它。

private void ParseXml(string responce) // respnce is xml string. 
{ 
    string transactionType = responce.JustAfter("<TransactionType>", "</TransactionType>"); 
    string userName = responce.JustAfter("<Username>", "</UserName>"); 
    string password = responce.JustAfter("<Password>", "</Password>"); 

    ResponceClass resClass = new RespnceClass() 
    { 
     Transaction = transactionType, 
     UserName = userName, 
     Password = password 
    }); 
} 
相關問題