【问题标题】:XML Serializing and Deserializing List<string> in c#C# 中的 XML 序列化和反序列化 List<string>
【发布时间】:2016-02-27 18:34:49
【问题描述】:

我有一个以下类的对象

[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 个字符串对象

“项目”、“经理”、“高级”、“项目”、“经理” 反序列化是在每个空格之后创建新的字符串对象

我们将不胜感激快速帮助

【问题讨论】:

  • 中间 XML 是什么样的?
  • w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema" 职位="项目经理高级项目经理" />
  • 我认为您应该删除XmlAttribute 属性。 XmlSerializer 不知道如何解析属性字符串中的值,除了在空格上拆分它。或者,您可以创建一个属性,该属性将为您提供String,该属性允许明确地分隔其中的各个项目(例如使用逗号或其他),并且可以解析设置为的String 中的各个项目。此属性将是可序列化的,而实际 List 将是 XmlIgnore
  • 它就像一个魅力......非常感谢!!!

标签: c# xml-serialization xml-deserialization


【解决方案1】:

尤金·波德斯卡尔的回答

认为您应该删除 XmlAttribute 属性。 XmlSerializer 不知道如何解析属性字符串中的值,除了在空格上拆分它。或者,您可以创建一个属性,该属性将为您提供 String ,该属性允许明确分隔其中的各个项目(如逗号或其他),并且可以从它设置的 String 中解析各个项目。此属性将是可序列化的,而实际 List 将是 XmlIgnore

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2011-05-12
    • 2010-11-25
    相关资源
    最近更新 更多