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

Joh*_*ski 2 c# xml-serialization

我的最后一个问题是将序列化的对象的字符串表示形式化为XML.其中一个响应者编写了一个扩展方法来封装序列化过程.

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

提前致谢!

Mat*_*ted 7

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

new XElement("people", myPeople.ToXElements());
Run Code Online (Sandbox Code Playgroud)
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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Vas*_*nan 5

使用链接中的代码示例,您可以添加这样的另一个方法或使用ToArray()方法将它们转换为数组.

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

  • 可能很感兴趣:研究语言Cω(其中Linq的一些想法首先是原型)自动定义了您的示例方法.`IEnumerable <T>`实际上会有与`T`方法名称相同的方法,除了返回类型`R`将成为`IEnumerable <R>`.这就像"Select"以非常简洁的方式构建在语言中. (2认同)