c#List转换成字符串详解

发布时间:2023-05-20

一、List转换成字符串有哪些方法

List作为C#中非常常用的数据结构,在进行转换成字符串的时候也是非常常见的操作。下面将介绍几种常用的方法:

1. 使用string.Join()方法

List<string> list = new List<string>(){"a", "b", "c"};
string str = string.Join("", list);
Console.WriteLine(str); //"abc"

可以看到,我们利用string.Join()方法实现了将List转换成字符串,其中第一个参数是自定义的分隔符,如果不需要分隔符可以传入一个空字符串。

2. 使用StringBuilder类

List<string> list = new List<string>(){"hello", "world", "!"};
StringBuilder sb = new StringBuilder();
foreach(string s in list)
{
    sb.Append(s);
}
string str = sb.ToString(); //"helloworld!"

利用StringBuilder类可以实现对List的遍历和操作,将每一个元素拼接成字符串。

3. 使用Lambda表达式

List<string> list = new List<string>(){"1", "2", "3"};
string str = "";
list.ForEach(item => str += item);
Console.WriteLine(str); //"123"

使用Lambda表达式可以利用List的ForEach方法实现对每一个元素进行操作,再将结果拼接成字符串。

二、List中含有对象如何转换成字符串

有时候,我们的List中不仅仅存储了字符串,还有一些自定义的对象。这时候,我们就需要重写ToString()方法。

class Person
{
    public string Name {get; set;}
    public int Age {get; set;}
    public override string ToString()
    {
         return Name + " " + Age;
    }
}
List<Person> list = new List<Person>()
{
    new Person(){Name="Tom", Age=20},
    new Person(){Name="Jack", Age=22},
    new Person(){Name="Lily", Age=18},
};
StringBuilder sb = new StringBuilder();
foreach(Person p in list)
{
    sb.Append(p.ToString());
}
string str = sb.ToString(); //"Tom 20Jack 22Lily 18"

可以看到,我们在Person类中重写了ToString()方法,在遍历List的时候直接调用ToString()方法即可将对象转换成字符串。

三、List转换成Json格式字符串

在进行Web开发时,我们通常需要将List转换成Json格式字符串传递给前端以便渲染。这时候,我们可以使用Json.Net库。

1. 将List转换成Json字符串

List<Person> list = new List<Person>()
{
    new Person(){Name="Tom", Age=20},
    new Person(){Name="Jack", Age=22},
    new Person(){Name="Lily", Age=18},
};
string str = JsonConvert.SerializeObject(list);
Console.WriteLine(str); // "[{\"Name\":\"Tom\",\"Age\":20},{\"Name\":\"Jack\",\"Age\":22},{\"Name\":\"Lily\",\"Age\":18}]"

可以看到,我们利用了Json.Net库中的JsonConvert.SerializeObject()方法将List转换成了Json格式的字符串。

2. 将Json字符串转换成List

string str = "[{\"Name\":\"Tom\",\"Age\":20},{\"Name\":\"Jack\",\"Age\":22},{\"Name\":\"Lily\",\"Age\":18}]";
List<Person> list = JsonConvert.DeserializeObject<List<Person>>(str);
foreach(Person p in list)
{
    Console.WriteLine(p.Name + " " + p.Age);
}

与将List转换成Json字符串相反,我们使用JsonConvert.DeserializeObject()方法将Json字符串转换成List。

四、List转换成XML格式字符串

类似于Json转换,我们将List转换成XML格式字符串也是非常常见的操作。在这里我们可以使用XmlSerializer类。

1. 将List转换成XML格式字符串

List<Person> list = new List<Person>()
{
    new Person(){Name="Tom", Age=20},
    new Person(){Name="Jack", Age=22},
    new Person(){Name="Lily", Age=18},
};
XmlSerializer xs = new XmlSerializer(typeof(List<Person>));
using(StringWriter sw = new StringWriter())
{
    xs.Serialize(sw, list);
    string str = sw.ToString();
    Console.WriteLine(str);
    // <?xml version="1.0" encoding="utf-16"?>
    // <ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    //   <Person>
    //     <Name>Tom</Name>
    //     <Age>20</Age>
    //   </Person>
    //   <Person>
    //     <Name>Jack</Name>
    //     <Age>22</Age>
    //   </Person>
    //   <Person>
    //     <Name>Lily</Name>
    //     <Age>18</Age>
    //   </Person>
    // </ArrayOfPerson>
}

可以看到,我们使用XmlSerializer.Serialize()方法将List转换成了XML格式字符串。

2. 将XML字符串转换成List

string str = @"<?xml version=""1.0"" encoding=""utf-16""?>
<ArrayOfPerson xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
  <Person>
    <Name>Tom</Name>
    <Age>20</Age>
  </Person>
  <Person>
    <Name>Jack</Name>
    <Age>22</Age>
  </Person>
  <Person>
    <Name>Lily</Name>
    <Age>18</Age>
  </Person>
</ArrayOfPerson>";
XmlSerializer xs = new XmlSerializer(typeof(List<Person>));
using(StringReader sr = new StringReader(str))
{
    List<Person> list = (List<Person>)xs.Deserialize(sr);
    foreach(Person p in list)
    {
        Console.WriteLine(p.Name + " " + p.Age);
    }
}

与将List转换成XML字符串相反,我们使用XmlSerializer.Deserialize()方法将XML字符串转换成List。

总结

通过以上的介绍,我们可以看到C#中List转换成字符串的方法是非常丰富和灵活的,我们可以根据实际的需求选择不同的转换方式,从而更好地实现我们的业务逻辑。