如何在C#</string>中自定义List <string>的序列化

时间:2010-07-17 22:34:23

标签: c# xml-serialization

这是在扼杀我。我读过这些:

http://msdn.microsoft.com/en-us/library/athddy89(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/2baksw0z(v=VS.80).aspx

但我不知道如何将它们应用到我想要做的事情上。我想自定义以下列表序列化的方式......

[Serializable]
public class FinalConcentrations : List<string> { }

这样当我把它作为“objectToSerialze”传递给它时......

    public void serializeObject(object objectToSerialize, Stream outputStream)
    {
        // removes the default added namespaces
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");

        XmlSerializer serial = new XmlSerializer(objectToSerialize.GetType());
        MemoryStream ms = new MemoryStream();
        serial.Serialize(ms, objectToSerialize, ns);

        StreamReader reader = new StreamReader(ms);
        ms.Position = 0;

        ms.WriteTo(outputStream);
    }

...它将此内容写入输出流:

<FinalConcentrations>
   <FinalConcentration>string value 1</FinalConcentration>
   <FinalConcentration>string value 2</FinalConcentration>
   <FinalConcentration>string value 3</FinalConcentration>
</FinalConcentration>

...而不是这个

<FinalConcentrations>
   <string>string value 1</string>
   <string>string value 2</string>
   <string>string value 3</string>
</FinalConcentration>

我的serializeObject方法用于序列化各种各样的对象,所以我正在寻找一种在FinalConcentrations定义中而不是在该方法中执行此操作的方法。

请帮忙。

2 个答案:

答案 0 :(得分:1)

解决这个问题的最简单方法是传入一个包装器对象而不是列表本身,即

public class FinalConcentrations {
    private readonly List<string> items = new List<string>();
    [XmlElement("FinalConcentration")]
    public List<string> Items {get {return items;}}
}
那是吗?

答案 1 :(得分:0)

好吧,当我运行你的例子时,我实际上已经

<?xml version="1.0"?>
<ArrayOfString>
  <string>Red</string>
  <string>Green</string>
  <string>Blue</string>
</ArrayOfString>

但是通过改变

  [Serializable, XmlRoot( ElementName= "FinalConcentrations")]
  public class FinalConcentrations : List<string> { }

我得到了

<?xml version="1.0"?>
<FinalConcentrations>
  <string>Red</string>
  <string>Green</string>
  <string>Blue</string>
</FinalConcentrations>

QED?

有一大堆XML装饰器属性可以改变序列化,例如。的XmlElement。值得一看。

祝你好运。