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();
        }