用于将IEnumerable <t>对象序列化为字符串数组的扩展方法?</t>

时间:2009-07-16 16:08:33

标签: c# xml-serialization

My last question was about getting the string representation of an object serialized to XML。其中一个响应者编写了一个扩展方法来封装序列化过程。

我现在的问题是,当传递IEnumerable<T>对象时,如何使用扩展方法返回字符串数组,其中数组中的每个string都是{的单独序列化元素{1}}。

提前致谢!

3 个答案:

答案 0 :(得分:7)

回答你接下来的几个问题......

new XElement("people", myPeople.ToXElements());

public static class XmlTools
{
    public static XElement ToXElement<T>(this T input)
    {
        return XElement.Parse(input.ToXmlString());
    }
    public static IEnumerable<XElement> ToXElements<T>(this IEnumerable<T> input)
    {
        foreach (var item in input)
            yield return input.ToXElement();
    }
    public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> input)
    {
        foreach (var item in input)
            yield return item.ToXmlString();
    }
    public static string ToXmlString<T>(this T input)
    {
        using (var writer = new StringWriter())
        {
            input.ToXml(writer);
            return writer.ToString();
        }
    }
    public static void ToXml<T>(this T objectToSerialize, Stream stream)
    {
        new XmlSerializer(typeof(T)).Serialize(stream, objectToSerialize);
    }

    public static void ToXml<T>(this T objectToSerialize, StringWriter writer)
    {
        new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize);
    }
}

答案 1 :(得分:5)

使用链接中的代码示例,您可以添加其他类似的方法,或使用ToArray()方法将它们转换为数组。

public static class XmlTools
{
  public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> inputs)
  {
     return inputs.Select(pArg => pArg.ToXmlString());
  }
}

答案 2 :(得分:2)

我会编写扩展方法来生成新的IEnumerable而不是数组:

public static IEnumerable<string> XmlSerializeAll<T>(this IEnumerable<T> input)
{
    foreach (T item in input)
    {
        yield return item.ToXmlString();
    }
}

您可以使用

轻松获得所需的阵列
var myArray = myEnumerable.XmlSerializeAll().ToArray();

这样,您可以增加一些灵活性。如果您愿意,可以生成List,或者使用无限长的枚举:)