/// <summary>
        /// Serialize the specified entity collection to a string using the specified delimiter character, optionally generating a header row
        /// </summary>
        /// <typeparam name="T">The type of entities in the collection.</typeparam>
        /// <param name="entities">The collection to serialize.</param>
        /// <param name="delimiter">A <see cref="SeparatedValuesDelimiter"/> indicating how to separate individual fields in the output string.</param>
        /// <param name="generateHeader">True to generate a header row for the serialized fields, false to skip the header row. The default is true.</param>
        /// <returns>A string reperesentation of the entity collection.</returns>
        /// <exception cref="ArgumentOutOfRangeException">Thrown when an invalid <paramref name="delimiter"/> is provided.</exception>
        public static string SerializeToString <T>(IEnumerable <T> entities, SeparatedValuesDelimiter delimiter, bool generateHeader = true)
        {
            string delimiterString = DelimiterString(delimiter);

            if (String.IsNullOrEmpty(delimiterString))
            {
                throw new ArgumentOutOfRangeException("delimiter");
            }

            bool isDataContract     = false;
            var  propertiesToExport = getExportProperties <T>(out isDataContract);

            StringBuilder serializedData = new StringBuilder();

            if (generateHeader)
            {
                string line = generateHeaderLine(propertiesToExport, isDataContract, delimiterString);
                serializedData.AppendLine(line);
            }

            foreach (var entity in entities)
            {
                var line = generateEntityLine(entity, propertiesToExport, delimiterString);
                serializedData.AppendLine(line);
            }

            return(serializedData.ToString().Trim());
        }
예제 #2
0
        public void SerializeToString_Writes_Simple_Collection_To_String(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(simpleEntities, delimiter),
                Does.EndWith(String.Format(@"""{0}""{1}""{2}""", foo, delimiterString, bar))
                );
        }
예제 #3
0
        public void SerializeToString_Writes_Empty_Collection_To_String(SeparatedValuesDelimiter delimiter)
        {
            var emptyEntities = Enumerable.Empty <SimpleEntityMock>();

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(emptyEntities, delimiter),
                Is.EqualTo(String.Format("foo{0}bar", SeparatedValuesSerializer.DelimiterString(delimiter)))
                );
        }
        public void SerializeToString_Can_Skip_Writing_Header_Row(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);
            var entities = new[] { new { id = "my-id", name = "my-name", number = 42 } };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter, false),
                Is.Not.StringContaining(String.Join(delimiterString, "id", "name", "number"))
            );
        }
        public void SerializeToString_Writes_Header_Row_By_Default(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);
            var entities = new[] { new { id = "my-id", name = "my-name", number = 42 } };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Is.StringStarting(String.Join(delimiterString, "id", "name", "number"))
            );
        }
예제 #6
0
        public void SerializeToString_Writes_Complex_Collection_To_String(SeparatedValuesDelimiter delimiter)
        {
            string serializedSimpleEntities = String.Format("[{{\"foo\":\"{0}\",\"bar\":\"{1}\"}},{{\"foo\":\"{0}\",\"bar\":\"{1}\"}}]", foo, bar);
            string delimiterString          = SeparatedValuesSerializer.DelimiterString(delimiter);

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(complexEntities, delimiter),
                Does.EndWith(String.Format(@"""complexEntity""{0}""{1}""", delimiterString, serializedSimpleEntities))
                );
        }
예제 #7
0
        public void SerializeToString_Writes_Header_Row_By_Default(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);
            var    entities        = new[] { new { id = "my-id", name = "my-name", number = 42 } };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Does.StartWith(String.Join(delimiterString, "id", "name", "number"))
                );
        }
예제 #8
0
        public void SerializeToString_Can_Skip_Writing_Header_Row(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);
            var    entities        = new[] { new { id = "my-id", name = "my-name", number = 42 } };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter, false),
                Does.Not.Contain(String.Join(delimiterString, "id", "name", "number"))
                );
        }
        /// <summary>
        /// Gets the corresponding delimiter string for the specified <see cref="SeparatedValuesDelimiter"/>
        /// </summary>
        public static string DelimiterString(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = String.Empty;

            if (delimiter == SeparatedValuesDelimiter.Comma)
            {
                delimiterString = ",";
            }
            else if (delimiter == SeparatedValuesDelimiter.Tab)
            {
                delimiterString = "\t";
            }

            return(delimiterString);
        }
예제 #10
0
        public void SerializeToString_Respects_DataContractAttribute(SeparatedValuesDelimiter delimiter)
        {
            var    dataContractEntities = new[] { new DataContractEntityMock(foo, bar, bup) };
            string delimiterString      = SeparatedValuesSerializer.DelimiterString(delimiter);

            string csvData = SeparatedValuesSerializer.SerializeToString(dataContractEntities, delimiter);

            Assert.That(
                csvData,
                Does.EndWith(String.Format("\"{0}\"{1}\"{2}\"", foo, delimiterString, bar))
                );

            Assert.That(
                csvData,
                Does.Not.Contain("bup")
                .And
                .Not.Contains(bup)
                );
        }
        public void SerializeToString_Writes_Simple_Collection_To_String(SeparatedValuesDelimiter delimiter)
        {
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(simpleEntities, delimiter),
                Is.StringEnding(String.Format(@"""{0}""{1}""{2}""", foo, delimiterString, bar))
            );
        }
        public void SerializeToString_Respects_DataContractAttribute(SeparatedValuesDelimiter delimiter)
        {
            var dataContractEntities = new[] { new DataContractEntityMock(foo, bar, bup) };
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);

            string csvData = SeparatedValuesSerializer.SerializeToString(dataContractEntities, delimiter);

            Assert.That(
                csvData, 
                Is.StringEnding(String.Format("\"{0}\"{1}\"{2}\"", foo, delimiterString, bar))
            );

            Assert.That(
                csvData, 
                Is.Not.StringContaining("bup")
                  .And
                  .Not.StringContaining(bup)
            );
        }
        public void SerializeToString_Serializes_LocationColumn_In_Socrata_Publish_Format(SeparatedValuesDelimiter delimiter)
        {
            string latitude = "lat";
            string longitude = "lng";

            var entities = new[] { 
                new { 
                    location =  new LocationColumn() { Latitude = latitude, Longitude = longitude }
                } 
            };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Is.StringEnding(String.Format("\"({0},{1})\"", latitude, longitude))
            );
        }
예제 #14
0
 public void SerializeToString_Throws_ArgumentOutOfRangeException_For_Invalid_Delimiter(SeparatedValuesDelimiter delimiter)
 {
     Assert.That(() => SeparatedValuesSerializer.SerializeToString(simpleEntities, delimiter), Throws.TypeOf <ArgumentOutOfRangeException>());
 }
예제 #15
0
        public void SerializeToString_Writes_Empty_String_For_LocationColumn_With_Missing_Lat_Or_Long(SeparatedValuesDelimiter delimiter)
        {
            string latitude  = "lat";
            string longitude = "lng";

            var entities = new[] {
                new {
                    location = new LocationColumn()
                    {
                        Latitude = null, Longitude = longitude
                    }
                },
                new {
                    location = new LocationColumn()
                    {
                        Latitude = latitude, Longitude = null
                    }
                }
            };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Does.Not.Contain(latitude)
                .And.Not.Contain(longitude)
                );
        }
예제 #16
0
        public void SerializeToString_Serializes_LocationColumn_In_Socrata_Publish_Format(SeparatedValuesDelimiter delimiter)
        {
            string latitude  = "lat";
            string longitude = "lng";

            var entities = new[] {
                new {
                    location = new LocationColumn()
                    {
                        Latitude = latitude, Longitude = longitude
                    }
                }
            };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Does.EndWith(String.Format("\"({0},{1})\"", latitude, longitude))
                );
        }
        public void SerializeToString_Writes_Empty_String_For_LocationColumn_With_Missing_Lat_Or_Long(SeparatedValuesDelimiter delimiter)
        {
            string latitude = "lat";
            string longitude = "lng";

            var entities = new[] { 
                new { 
                    location =  new LocationColumn() { Latitude = null, Longitude = longitude }
                },
                new { 
                    location =  new LocationColumn() { Latitude = latitude, Longitude = null }
                }
            };

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(entities, delimiter),
                Is.Not.StringContaining(latitude)
                .And.Not.StringContaining(longitude)
            );
        }
 public void SerializeToString_Throws_ArgumentOutOfRangeException_For_Invalid_Delimiter(SeparatedValuesDelimiter delimiter)
 {
     string result = SeparatedValuesSerializer.SerializeToString(simpleEntities, delimiter);
 }
 public void SerializeToString_Writes_Empty_Collection_To_String(SeparatedValuesDelimiter delimiter)
 {
     var emptyEntities = Enumerable.Empty<SimpleEntityMock>();
     
     Assert.That(
         SeparatedValuesSerializer.SerializeToString(emptyEntities, delimiter),
         Is.EqualTo(String.Format("foo{0}bar", SeparatedValuesSerializer.DelimiterString(delimiter)))
     );
 }
        public void SerializeToString_Writes_Complex_Collection_To_String(SeparatedValuesDelimiter delimiter)
        {
            string serializedSimpleEntities = String.Format("[{{\"foo\":\"{0}\",\"bar\":\"{1}\"}},{{\"foo\":\"{0}\",\"bar\":\"{1}\"}}]", foo, bar);
            string delimiterString = SeparatedValuesSerializer.DelimiterString(delimiter);

            Assert.That(
                SeparatedValuesSerializer.SerializeToString(complexEntities, delimiter),
                Is.StringEnding(String.Format(@"""complexEntity""{0}""{1}""", delimiterString, serializedSimpleEntities))
            );
        }
예제 #21
0
 public void SerializeToString_Throws_ArgumentOutOfRangeException_For_Invalid_Delimiter(SeparatedValuesDelimiter delimiter)
 {
     string result = SeparatedValuesSerializer.SerializeToString(simpleEntities, delimiter);
 }