将一些字符串转换为数组或列表

本文关键字:数组 列表 转换 字符串 | 更新日期: 2023-09-27 18:13:50

嗨,我正在调用一个rest服务来获取国家,该服务正在返回国家给我,但它不是作为一个列表或我无法将其转换为列表,是否有可能转换国家列表并将其绑定到一个组合框。我还想澄清一下,我没有创建服务,或者我不能修改服务,但我必须使用该服务,这对我来说是强制性的。

{
    "CountryList":"<Countries><Country><Code>0<'/Code><Name>aaaa<'/Name><'/Country><Country><Code>1<'/Code><Name>bbbbbb<'/Name><'/Country> ... other countries ... <'/Countries>",
    "Error":{
        "ErrorCode": 0,
        "ErrorMessage": ""
    }
}

我使用这个类来解析json

public class Error
{
    public int ErrorCode { get; set; }
    public string ErrorMessage { get; set; }
}
public class Country
{
    public string CountryList { get; set; }
    public Error Error { get; set; }
}

将一些字符串转换为数组或列表

我不知道什么样的服务返回这个响应,但是正如您所看到的,您的JSON包含一个XML字符串。

反序列化JSON或XML的工作流程非常简单。

生成几个类来反序列化JSON (Visual Studio: Edit -> Paste Special -> Paste JSON As classes):

public class Rootobject
{
    public string CountryList { get; set; }
    public Error Error { get; set; }
}
public class Error
{
    public int ErrorCode { get; set; }
    public string ErrorMessage { get; set; }
}

和反序列化响应(使用JSON.NET):

var responseObject = JsonConvert.DeserializeObject<RootObject>(jsonString);

然后需要对XML进行反序列化。创建另一组类(Edit -> Paste Special -> Paste XML As classes):

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Countries
{
    private CountriesCountry[] countryField;
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Country")]
    public CountriesCountry[] Country
    {
        get
        {
            return this.countryField;
        }
        set
        {
            this.countryField = value;
        }
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class CountriesCountry
{
    private string codeField;
    private string nameField;
    /// <remarks/>
    public string Code
    {
        get
        {
            return this.codeField;
        }
        set
        {
            this.codeField = value;
        }
    }
    /// <remarks/>
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }
}

和反序列化XML字符串(可选):

var countries = Deserialize<Countries>(responseObject.CountryList);