用于将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,或者如果你喜欢使用无限长的枚举:)