Выходные данные JSON Census Geocoder преобразуются в набор данных Xml с использованием JSON.net в C #

Я создаю .Net-приложение в Visual Studio 2012, которое запрашивает таблицу адресов в моем дБ SQL и использует API геокодирования Census для возврата конкретного MSA для каждого адреса. У меня есть существующий код для запроса дБ, но у меня возникают проблемы с преобразованием вывода Json API Census в набор данных Xml. Я использую Json.net для сериализации вывода json, а затем десериализации в .net для загрузки в XmlDocument. К сожалению, я получаю сообщение об ошибке XmlException:

Данные на корневом уровне недействительны. Линия 1, позиция 1

Подробности:

System.Xml.XmlException не было обработано HResult = -2146232000
Сообщение = Данные на корневом уровне недействительны. Строка 1, позиция 1.
Source = System.Xml LineNumber = 1 LinePosition = 1 SourceUri = ""
StackTrace: в System.Xml.XmlTextReaderImpl.Throw (исключение e) в System.Xml.XmlTextReaderImpl.Throw (String res, String arg) в System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace () в System.XT. System.Xml.XmlTextReaderImpl.Read () в System.Xml.XmlLoader.Load (XmlDocument doc, читатель XmlReader, логическое preserveWhitespace) в System.Xml.XmlDocument.Load (читатель XmlReader) в System.Xml.XmlDocument.oad ) в ConsoleApplication1.Program.Main (String [] args) в c: \ Users \ jdsmith \ Documents \ Visual Studio 2012 \ Projects \ C # \ MSA_Application_v2 \ MSA_Application_v2 \ Model \ Program.cs: строка 54 в System.AppDomain._nExecuteAssembly ( Сборка RuntimeAssembly, String [] args) в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence AssemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ThreadHelper.ThxtStart_ в System.Threading.ExecutionContext.RunIntern al (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, ContextCallback, состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExbacktionContext.Tun Состояние объекта) в System.Threading.ThreadHelper.ThreadStart () InnerException:

Я считаю, что Json или Xml необходимо отформатировать дальше, но я не знаю как. Кроме того, я уверен, что я делаю это слишком сложным для себя ... если есть лучший способ, я весь слух.

Вот пример geolookup, который я использую для тестирования:

http://geocoding.geo.census.gov/geocoder/geographies/address?street=4600+Silver+Hill+Rd&city=Suitland&state=MD&benchmark=Public_AR_Census2010&vintage=Census2010_Census2010&layers=14&format=json

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Data;
using System.Net;
using System.IO;
using System.Xml;
using System.Runtime.Serialization.Json;
using System.Xml.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        private static string geoRT = "geographies";
        private static string geoST = "address";
        private static string geoStreet = "4600+Silver+Hill+Rd";
        private static string geoCity = "Suitland";
        private static string geoState = "MD";
        private static string geoZip = "20746";
        private static string geoBM = "Public_AR_Census2010";
        private static string geoVin = "Census2010_Census2010";
        private static string geoLayer = "all";
        private static string geoFormat = "json";
        static void Main(string[] args)
        {
            StringBuilder geoRelURI = new StringBuilder();
            geoRelURI.AppendFormat(@"{0}/{1}?street={2}&city={3}&state={4}&zip={5}&benchmark={6}&vintage={7}&layers={8}&format={9}"
                , geoRT, geoST, geoStreet, geoCity, geoState, geoZip, geoBM, geoVin, geoLayer, geoFormat);

            Uri geoBaseURI = new Uri("http://geocoding.geo.census.gov/geocoder/");
            Uri geoURI = new Uri(geoBaseURI, geoRelURI.ToString());

            //Console.WriteLine(geoURI);
            //Console.ReadLine();

            WebRequest geoRequest = WebRequest.Create(geoURI);
            WebResponse geoResponse = geoRequest.GetResponse();

            Stream geoDataStream = geoResponse.GetResponseStream();
            StreamReader geoReader = new StreamReader(geoDataStream);
            string geoString = geoReader.ReadToEnd();
            var jsonConvert = JsonConvert.SerializeObject(geoString);
            string jsonString = jsonConvert.ToString();
            var xmlConvert = JsonConvert.DeserializeObject(jsonString);
            string xmlString = xmlConvert.ToString();

            XmlDocument geoXMLDoc = new XmlDocument();
            geoXMLDoc.LoadXml(xmlString);

            XmlWriterSettings xmlSettings = new XmlWriterSettings();
            xmlSettings.Indent = true;

            XmlWriter geoXMLWriter = XmlWriter.Create("geoXML.xml", xmlSettings);
            geoXMLDoc.Save(geoXMLWriter);

            Console.Write("<BR>" + geoXMLDoc.OuterXml);

            //Console.WriteLine(xmlString);
            //Console.ReadLine();

            geoDataStream.Close();
            geoResponse.Close();

        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос