public static async Task WriteXmlAsync(Stream incoming, Stream outgoing, Func <string, string> tenantNameTransform, ListOptions listOptions, object liststate, params string[] parseInfo) { XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.IgnoreWhitespace = false; readerSettings.Async = true; var reader = XmlReader.Create(incoming, readerSettings); using (var writer = XmlWriter.Create(outgoing, new XmlWriterSettings { Async = true, CloseOutput = false })) { while (await reader.ReadAsync()) { if (parseInfo.Any(a => a == reader.Name)) { // jsonWriter.WriteStartArray(); while (parseInfo.Any(a => a == reader.Name)) { var name = reader.Name; var node = XNode.ReadFrom(reader); var el = (XElement)node; if (listOptions.BlobListFilter == null || listOptions.BlobListFilter(el, liststate)) { var nameEl = el.Element("Name"); if (tenantNameTransform != null) { nameEl.SetValue(tenantNameTransform(nameEl.Value)); } await writer.WriteNodeAsync(node.CreateReader(), true); // node.WriteTo(writer); // writeJson(jsonWriter, node.CreateReader(), name); } //serializer.Serialize(jsonWriter, node); } if (listOptions.BlobListFilterFinalizer != null) { foreach (var el in listOptions.BlobListFilterFinalizer(liststate)) { await writer.WriteNodeAsync(el.CreateReader(), true); // writeJson(jsonWriter, el.CreateReader(), el.Name.LocalName); } } // jsonWriter.WriteEndArray(); } //await writer.start(reader, true); // WriteJsonElement(reader, jsonWriter, "EnumerationResults"); WriteShallowNode(reader, writer); } writer.Flush(); } }
private async Task WriteJsonAsync(Stream incoming, Stream outgoing, Func <string, string> tenantNameTransform, ListOptions listOptions, object liststate, params string[] parseInfo) { XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.IgnoreWhitespace = false; readerSettings.Async = true; var reader = XmlReader.Create(incoming, readerSettings); var jsonWriter = new JsonTextWriter(new StreamWriter(outgoing)); // jsonWriter.WriteStartObject(); // var serializer = JsonSerializer.CreateDefault(); while (await reader.ReadAsync()) { if (parseInfo.Any(a => a == reader.Name)) { // jsonWriter.WriteStartArray(); while (parseInfo.Any(a => a == reader.Name)) { var name = reader.Name; var node = XNode.ReadFrom(reader); var el = (XElement)node; if (listOptions.BlobListFilter == null || listOptions.BlobListFilter(el, liststate)) { var nameEl = el.Element("Name"); if (tenantNameTransform != null) { nameEl.SetValue(tenantNameTransform(nameEl.Value)); } writeJson(jsonWriter, node.CreateReader(), name); } //serializer.Serialize(jsonWriter, node); } if (listOptions.BlobListFilterFinalizer != null) { foreach (var el in listOptions.BlobListFilterFinalizer(liststate)) { writeJson(jsonWriter, el.CreateReader(), el.Name.LocalName); } } // jsonWriter.WriteEndArray(); } WriteJsonElement(reader, jsonWriter, "EnumerationResults"); } // jsonWriter.WriteEndObject(); jsonWriter.Flush(); }