3

我不知道如何将一些 XML 表示为 C# 类。有人对如何正确映射此 xml 有任何建议吗?下面是我的尝试:

<authenticationResponse>
  <Accounts>
    <AccountId>1</AccountId>
    <AccountId>5</AccountId>
  </Accounts>
</authenticationResponse>


public class authenticationResponse
{
    [XmlElement("Accounts")]
    [DataMember]
    public List<Account> Accounts { get; set; }
}

public class Account
{
    public long id { get; set; }
}
4

4 回答 4

5

Visual Studio 2012 有一个很酷的功能,称为“将 XML 粘贴为类”(在 Edit > Paste Special 下)。您只需将 XML 复制到剪贴板,此“将 XML 粘贴为类”功能将为authenticationResponse您生成并粘贴此类:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class authenticationResponse
{

    private byte[] accountsField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute()]
    [System.Xml.Serialization.XmlArrayItemAttribute("AccountId", IsNullable = false)]
    public byte[] Accounts
    {
        get
        {
            return this.accountsField;
        }
        set
        {
            this.accountsField = value;
        }
    }
}
于 2013-02-05T05:49:39.167 回答
3

您可以通过 LINQ to XML 加载这些数据:

XElement x = XElement.Load("YourFile.xml");
List<Account> accounts = x.Element("Accounts")
                            .Elements("AccountId")
                            .Select(e => new Account { id = (long)e })
                            .ToList();

在这种情况下authenticationResponse,类是多余的。

如果您在内存中得到响应(而不是在硬盘驱动器上的文件中),您可以使用这个:

string response = ...
XElement x = XElement.Load(new StringReader(response));
于 2013-02-05T02:40:55.203 回答
3

您可以将 XML 反序列化为以下类:

[XmlRoot("authenticationResponse")] 
public class AuthenticationResponse 
{ 
    [XmlArrayItem("AccountId")] 
    public List<long> Accounts { get; set; } 
}

下面是反序列化的代码:

AuthenticationResponse response = null; 
var serializer = new XmlSerializer(typeof(AuthenticationResponse));

using (StringReader sr = new StringReader(xml)) 
{ 
    response = (AuthenticationResponse)serializer.Deserialize(sr); 
}
于 2013-02-05T04:22:09.730 回答
2

我不使用 Visual Studio 2012,所以没有将 XML 粘贴为类。但是,在这种情况下,如果我需要快速解决方案,我经常使用 Visual Studio 工具中的 xsd.exe 程序。它从 XML 架构定义(.xsd 文件)生成 C# 类。

如果您没有相关 XML 的 XSD,您可以从许多 XML 工具中快速生成一个。我使用 oXygen(提供试用版),加载您的 XML 示例,然后选择工具 | 生成/转换架构。从长远来看,假设您不想依赖 3rd 方工具,我坚持认为 XML 数据的来源也为我提供了 Schema。

示例 xsd.exe 命令行(从 Visual Studio 命令提示符运行):

    xsd.exe FileName.xsd /n:Namespace.Cust.App.UI /c

将生成一个名为 FileName.cs 的 .cs 文件。

于 2013-02-05T13:13:57.890 回答