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