XML 在 c# 中序列化和反序列化列表<string>
XML Serializing and Deserializing List<string> in c#
我有一个关注对象class
[XmlRoot("http://schemas.abc.com")]
[DataContract]
public class Employee
{
[XmlAttribute]
[DataMember]
public List<string> Positions { get; set; }
}
Positions 包含以下两个字符串 "Project Manager" 和 "Senior Project Manager"
我通过以下方法序列化了这个对象并保存在数据库中
public static string Serialize(Employee entity)
{
var memoryStream = new MemoryStream();
var serializer = new XmlSerializer(typeof(Employee));
using (var xmlTextWriter = new XmlTextWriter(memoryStream,
Encoding.Unicode))
{
serializer.Serialize(xmlTextWriter, entity);
xmlTextWriter.Close();
}
return UnicodeByteArrayToString(memoryStream.ToArray());
}
private static string UnicodeByteArrayToString(byte[] input)
{
var constructedString = Encoding.Unicode.GetString(input);
return constructedString;
}
然后我通过以下方法检索和反序列化对象
public static Employee Deserialize(string str)
{
var data = StringToUnicodeByteArray(str);
var memoryStream = new MemoryStream(data);
var serializer = new XmlSerializer(typeof(Employee));
var xmlTextReader = new XmlTextReader(memoryStream);
return (Employee)serializer.Deserialize(xmlTextReader);
}
private static byte[] StringToUnicodeByteArray(string input)
{
var byteArray = Encoding.Unicode.GetBytes(input);
return byteArray;
}
现在我在位置列表中得到 5 个字符串对象
"Project"、"Manager"、"Senior"、"Project"、"Manager"
反序列化在每个 space
之后创建新的字符串对象
快速帮助将不胜感激
Eugene Podskal 的回答
认为您应该删除 XmlAttribute 属性。 XmlSerializer 不知道如何解析属性字符串中的值,除非将其拆分为空格。或者你可以创建一个 属性 ,它会给你一个字符串,它允许明确地分隔其中的各个项目(比如用逗号或其他),并且可以从它设置的字符串中解析各个项目。此 属性 将是可序列化的,而实际列表将是 XmlIgnore
我有一个关注对象class
[XmlRoot("http://schemas.abc.com")]
[DataContract]
public class Employee
{
[XmlAttribute]
[DataMember]
public List<string> Positions { get; set; }
}
Positions 包含以下两个字符串 "Project Manager" 和 "Senior Project Manager"
我通过以下方法序列化了这个对象并保存在数据库中
public static string Serialize(Employee entity)
{
var memoryStream = new MemoryStream();
var serializer = new XmlSerializer(typeof(Employee));
using (var xmlTextWriter = new XmlTextWriter(memoryStream,
Encoding.Unicode))
{
serializer.Serialize(xmlTextWriter, entity);
xmlTextWriter.Close();
}
return UnicodeByteArrayToString(memoryStream.ToArray());
}
private static string UnicodeByteArrayToString(byte[] input)
{
var constructedString = Encoding.Unicode.GetString(input);
return constructedString;
}
然后我通过以下方法检索和反序列化对象
public static Employee Deserialize(string str)
{
var data = StringToUnicodeByteArray(str);
var memoryStream = new MemoryStream(data);
var serializer = new XmlSerializer(typeof(Employee));
var xmlTextReader = new XmlTextReader(memoryStream);
return (Employee)serializer.Deserialize(xmlTextReader);
}
private static byte[] StringToUnicodeByteArray(string input)
{
var byteArray = Encoding.Unicode.GetBytes(input);
return byteArray;
}
现在我在位置列表中得到 5 个字符串对象
"Project"、"Manager"、"Senior"、"Project"、"Manager" 反序列化在每个 space
之后创建新的字符串对象快速帮助将不胜感激
Eugene Podskal 的回答
认为您应该删除 XmlAttribute 属性。 XmlSerializer 不知道如何解析属性字符串中的值,除非将其拆分为空格。或者你可以创建一个 属性 ,它会给你一个字符串,它允许明确地分隔其中的各个项目(比如用逗号或其他),并且可以从它设置的字符串中解析各个项目。此 属性 将是可序列化的,而实际列表将是 XmlIgnore