public async Task <IHttpActionResult> Post([FromBody] string record) { string[] entries; if (!DelimitedSerializer <Person> .TryParseRecord(record, out entries)) { return(Conflict()); } try { locker.EnterWriteLock(); using (TextWriter textWriter = new StreamWriter(filePath, true)) { await textWriter.WriteLineAsync(record); } return(Ok()); } catch (Exception) { //log exception in the log file + consider sending email to all interested developers //somebody may like rethrow this exception(return it via function parameters) and handle it later + return error in HttpResponse //it depends. My preference is to log + send email return(InternalServerError()); } finally { locker.ExitWriteLock(); } }
public async Task RecordSet_RoundTrip_Success() { var delimitedSerializer = new DelimitedSerializer(); var records = await delimitedSerializer.Deserialize <RecordSet>(_tsvWithHeader); var reserialized = await delimitedSerializer.Serialize(records); Assert.True(ByteArraysEqual(_tsvWithHeader, reserialized)); }
public async Task EnumerableOfJObject_RoundTrip_Success() { var delimitedSerializer = new DelimitedSerializer(); var records = await delimitedSerializer.Deserialize <IEnumerable <JObject> >(_tsvWithHeader); var reserialized = await delimitedSerializer.Serialize(records); Assert.True(ByteArraysEqual(_tsvWithHeader, reserialized)); }
public async Task ListOfDataClass_RoundTrip_Success() { var delimitedSerializer = new DelimitedSerializer(); var records = await delimitedSerializer.Deserialize <IReadOnlyList <TestDataClass> >(_tsvWithHeader); var reserialized = await delimitedSerializer.Serialize(records); Assert.True(ByteArraysEqual(_tsvWithHeader, reserialized)); }
public async Task EnumerableOfDictionary_RoundTrip_Success() { var delimitedSerializer = new DelimitedSerializer(); var records = await delimitedSerializer.Deserialize <IEnumerable <IReadOnlyDictionary <string, string> > >(_tsvWithHeader); var reserialized = await delimitedSerializer.Serialize(records); Assert.True(ByteArraysEqual(_tsvWithHeader, reserialized)); }
private async Task <IEnumerable <Person> > GetRecordsAsync() { try { locker.EnterReadLock(); using (TextReader textReader = new StreamReader(filePath)) { DelimitedSerializer <Person> serializer = new DelimitedSerializer <Person>(); return(await serializer.DeserializeAsync(textReader)); } } catch (Exception ex) { //log exception in the log file + consider sending email to all interested developers //somebody may like rethrow this exception(return it via function parameters) and handle it later + return error in HttpResponse //it depends. My preference is to log + send email return(null); } finally { locker.ExitReadLock(); } }
public async Task Serialize_Tsv_IEnumerable_Success() { var delimitedSerializer = new DelimitedSerializer(); var records = new[]
public void DeserializeTest() { string myTestString = "Ann , JonesComma , Female , 200 , 23/6/1967"; DelimitedSerializer <Person> deserializer = new DelimitedSerializer <Person>(); IEnumerable <Person> result; using (TextReader sr = new StringReader(myTestString))//tests comma separators { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 1); } myTestString = "Ann JonesSpace Female 200 23/6/1967";//tests space separators using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 1); } myTestString = "Ann | JonesPipe | Female | 200 | 23/6/1967";//tests pipe separators using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 1); } myTestString = "Ann : JonesColon : Female : 200 : 23/6/1967";//tests against invalid separators using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 0); } myTestString = "Ann | JonesComma | Female | 23/6/1967";//tests expression which is missing entry using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 0); } myTestString = "Ann | JonesComma | Female | 200 | Extra entry | 23/6/1967";//tests expression which extra entry using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 0); } myTestString = "Ann JonesComma Female 200 23/6/1967\nAnn JonesSpace Female 200 23/6/1967\nAnn | JonesPipe | Female | 200 | 23/6/1967"; //tests 3 different separator in one file using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 3); } myTestString = "Ann JonesComma : Female 200 23/6/1967\nAnn JonesSpace Female 200 23/6/1967\nAnn | JonesPipe | Female | 200 | 23/6/1967"; //tests 3 different separator in one file with one invalid separator using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result.Count(), 2); } myTestString = "Ann JonesSpace Female 200 23/66/1967";//Invalid date format using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result, null); } myTestString = "Ann JonesSpace Female asdd 23/6/1967";//Invalid color format using (TextReader sr = new StringReader(myTestString)) { result = deserializer.Deserialize(sr); Assert.AreEqual(result, null); } }