public void CleanTest() { var structure = new List <StructureType>( new StructureType[] { StructureType.NAME, StructureType.ADDRESS } ); var data = new List <List <string> >(new List <string>[] { new List <string>(new string[] { "Кузнецов Петр Алексеич", "Москва Милютинский 13" }), new List <string>(new string[] { "Марципанова Ольга Викторовна", null }), new List <string>(new string[] { "Пузин Витя", null }) }); var request = new CleanRequest(structure, data); var cleanedRecords = api.Clean(request).data; Assert.AreEqual(cleanedRecords.Count, 3, String.Format("Expected 3 records, but got {0}", cleanedRecords.Count)); Assert.IsInstanceOfType(typeof(NameData), cleanedRecords[0][0], "Expected [0,0] entity to be a Name"); var firstName = (NameData)cleanedRecords[0][0]; Assert.AreEqual(firstName.name, "Петр", String.Format("Expected name 'Петр', but got {0}", firstName.name)); Assert.AreEqual(firstName.patronymic, "Алексеевич", String.Format("Expected patronymic 'Алексеевич', but got {0}", firstName.patronymic)); Assert.AreEqual(firstName.surname, "Кузнецов", String.Format("Expected surname 'Кузнецов', but got {0}", firstName.surname)); Assert.IsInstanceOfType(typeof(AddressData), cleanedRecords[0][1], "Expected [0,1] entity to be an Address"); var firstAddress = (AddressData)cleanedRecords[0][1]; Assert.AreEqual(firstAddress.kladr_id, "77000000000717100", String.Format("Expected kladr id '77000000000717100', but got {0}", firstAddress.kladr_id)); Assert.AreEqual(firstAddress.metro[0].name, "Чистые пруды"); }
/// <summary> /// Clean records via DaData.ru. /// </summary> /// <param name="request">Clean request.</param> public CleanResponse Clean(CleanRequest request) { var httpRequest = CreateHttpRequest(); // prepare serialized json request using (var w = new StreamWriter(httpRequest.GetRequestStream())) { using (JsonWriter writer = new JsonTextWriter(w)) { this.serializer.Serialize(writer, request); } } // get response and de-serialize it to typed records var httpResponse = (HttpWebResponse)httpRequest.GetResponse(); using (var r = new StreamReader(httpResponse.GetResponseStream())) { string responseText = r.ReadToEnd(); return(JsonConvert.DeserializeObject <CleanResponse>(responseText, this.converter)); } }
/// <summary> /// Clean entities of specified type via DaData.ru. /// </summary> /// <param name="inputs">Input data as array of raw strings (addresses, phones etc).</param> /// <typeparam name="T">Target entity type as supported by DaData (IDadataEntity subtypes — AddressData, PhoneData etc).</typeparam> public IList <T> Clean <T>(IEnumerable <string> inputs) where T : IDadataEntity { // infer structure from target entity type var structure = new List <StructureType>( new StructureType[] { TYPE_TO_STRUCTURE[typeof(T)] } ); // transform enity list to CleanRequest data structure var data = new List <List <string> >(); foreach (string input in inputs) { data.Add(new List <string>(new string[] { input })); } var request = new CleanRequest(structure, data); // get response and transform it to list of entities var response = Clean(request); var outputs = new List <T>(); foreach (IList <IDadataEntity> row in response.data) { outputs.Add((T)row[0]); } return(outputs); }