using System; using System.Text; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Net.Http.Headers; using System.Xml.Serialization; namespace DemoApiExample { /// /// A tutorial example of using System.Xml.Serialization to parse XML resource on the Doxpop Court Api. /// /// For more information on deserializing XML resources in C# see: /// https://msdn.microsoft.com/en-us/library/fa420a9y(v=vs.110).aspx /// public class XmlClient { private const string BaseUrl = "https://demo-api.doxpop.com"; // The format is "username:password" private const string Credentials = "demo:demo"; /// /// Makes an HTTP GET request to the api and returns the response body /// body. /// /// The HTTP response body private static string getPage(string uri) { var client = new HttpClient { BaseAddress = new Uri(BaseUrl) }; var acceptHeader = new MediaTypeWithQualityHeaderValue("application/xml"); client.DefaultRequestHeaders.Accept.Add(acceptHeader); var base64CredentialBytes = Encoding.UTF8.GetBytes(Credentials); var base64encodedCredentials = Convert.ToBase64String(base64CredentialBytes); client.DefaultRequestHeaders.Add("Authorization", "Basic " + base64encodedCredentials); return client.GetStringAsync(uri).Result; } /// /// Program entry point. Fetches and prints some data from the API. /// /// public static void Main(string[] args) { var xmlString = getPage("/actors_cases.xml?fullname=rifkind,+david"); var serializer = new XmlSerializer(typeof(ActorCaseList)); var results = (ActorCaseList) serializer.Deserialize(new StringReader(xmlString)); foreach (var result in results.list) { Console.WriteLine(result.assignedCaseRole); // Print some actor information var actor = result.actor; Console.WriteLine(actor.fullName); Console.WriteLine(actor.birthDate.Date.ToString("yyyy-MM-dd")); // Print some address information foreach (var address in actor.addresses) { Console.WriteLine(address.line1); Console.WriteLine(address.city); Console.WriteLine(address.stateCode); Console.WriteLine(address.postalCode); } // Print some case information var courtCase = result.courtCase; Console.WriteLine(courtCase.caption); Console.WriteLine(courtCase.globalDispositionCode); Console.WriteLine(courtCase.dispositionDate.Date.ToString("yyyy-MM-dd")); // Use the charges URI and print the descriptions Console.WriteLine(courtCase.chargesUri); var chargesXmlString = getPage(courtCase.chargesUri + ".xml"); var chargeSerializer = new XmlSerializer(typeof(ChargeList)); var charges = (ChargeList) chargeSerializer.Deserialize(new StringReader(chargesXmlString)); foreach (var charge in charges.list) { Console.WriteLine(charge.description); } } } [XmlRoot("response")] public class ActorCaseList { [XmlElement("actor_case")] public List list; } /// /// Sample model of the search result information /// public class ActorCase { [XmlElement("case")] public CourtCase courtCase; [XmlElement("actor")] public Actor actor; [XmlElement("assigned_case_role")] public string assignedCaseRole; } /// /// Sample model of the court case information inside a search result /// public class CourtCase { [XmlElement("case_caption")] public string caption; [XmlElement("case_global_disposition_code")] public string globalDispositionCode; [XmlElement("case_disposition_date")] public DateTime dispositionDate; [XmlElement("charges_uri")] public string chargesUri; } /// /// Sample model of the actor information inside a search result /// public class Actor { [XmlElement("actor_full_name")] public string fullName; [XmlElement("actor_person_date_of_birth")] public DateTime birthDate; [XmlArray("addresses")] public List
addresses; } /// /// Sample model of the address information for an actor /// [XmlType("address")] public class Address { [XmlElement("address_line1")] public string line1; [XmlElement("address_city")] public string city; [XmlElement("address_state_province_code")] public string stateCode; [XmlElement("address_postal_code")] public string postalCode; } /// /// Sample model of charge information /// [XmlRoot("response")] public class ChargeList { [XmlElement("charge")] public List list; } /// /// Sample model of charge information /// public class Charge { [XmlElement("charge_desc")] public string description; } } }