简体   繁体   中英

XML Serializing and Deserializing List<string> in c#

i have an object of following class

[XmlRoot("http://schemas.abc.com")]
[DataContract]
public class Employee
{
    [XmlAttribute]
    [DataMember]
    public List<string> Positions { get; set; }
}

Positions contains following two strings "Project Manager" and "Senior Project Manager"

I serialized this object through following method and saved in DB

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;
}

Then i am retrieving and deserializing the object through following method

 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;
 }

Now i am getting 5 objects of strings in position list

"Project", "Manager", "Senior", "Project", "Manager" deserialization is creating new string object after every space

Quick help will be much appreciated

Answer from Eugene Podskal

think that you should remove the XmlAttribute attribute. XmlSerializer doesn't know how to parse values in attribute string other than by splitting it on whitespace. Or you can create a property that will give you String that allows to unambiguously separate individual items in it (like with commas or whatever), and that can parse individual items from the String it is set to. This propery will be serializable, while actual List will be XmlIgnore

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM