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

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

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

提前致谢!

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

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

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

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

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

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

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

您可以使用轻松获得所需的arrays

 var myArray = myEnumerable.XmlSerializeAll().ToArray(); 

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