Как настроить сериализацию списка <string>в C # - PullRequest
3 голосов
/ 18 июля 2010

Это убивает меня. Я прочитал это:

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 ]

1 голос
/ 18 июля 2010

Самый простой способ исправить это - передать объект-оболочку вместо самого списка, т.е.

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

что делать?

0 голосов
/ 18 июля 2010

Ну, когда я запустил ваш пример, я действительно получил

<?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>

КЭД?

Существует целый ряд атрибутов декоратора XML, которые могут изменить сериализацию, например.XmlElement.Стоит взглянуть на.

Удачи.

...