在Windows 8.1存储应用程序c#中从字符串转换为对象

时间:2014-01-13 15:30:21

标签: c# windows-8.1

我想将值转换为带有字符串的对象。我的意思是让我说我​​的字符串里面有XML代码:

代码段:

String response =@"<?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>";

我有一个Class,它具有Xml中提到的所有属性,如

类ResponseClass

String UserName;

String Password;

String Transaction;

如何在没有字符串解析的情况下设置ResponseClass对象中的所有值? 我已尝试使用序列化,但由于API的限制,它在Windows 8.1应用商店项目中给了我一些问题。

有没有办法让它排序?

由于

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

除非Xml是通过某个序列化程序生成的,否则您必须手动编码才能匹配。序列化和反序列化是齐头并进的。因此,如果您的xml文件是序列化程序的产品,则很可能是反序列化程序。如果您可以选择重新创建此xml文件,那么可以使用XmlSerializer这样做,这样就可以反序列化。

答案 2 :(得分:0)

如果您不想使用XmlSerializer那么这有点难看,但希望这将有助于满足您的需求。我已经为我的一些用途实现了类似的东西。首先制作一个扩展方法。

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
    });
}