Inheritance: ObjectNodeBase
Exemplo n.º 1
0
        public override void Encode(Stream stream, Encoding encoding = null)
        {
            var context = new Context(_options, Mode.Deserialize, NodeFormat);
            var header = new SimpleValue(_type.GenericEnumerableType);
            var columns = new ObjectNode(context, null, header, null, null)
                .Select(x => x.Name).ToArray();

            if (!columns.Any()) return;

            var writer = new StreamWriter(stream, encoding ?? UTF8Encoding.NoBOM);
            var qualifier = _options.CsvQualifier;

            Action<string[]> writeLine = x => writer
                .Write(x.Select(y =>
                    $"{qualifier}{y?.Replace(qualifier, qualifier + qualifier)}{qualifier}")
                .Aggregate((a, i) => $"{a}{_options.CsvDelimiter}{i}") + _options.CsvNewLine);

            writeLine(columns);

            foreach (var row in _rows)
            {
                var fields = new string[columns.Length];
                row.Where(x => columns.Contains(x.Name))
                    .ForEach(x => fields[columns.IndexOf(x.Name)] = x.Value?.ToString());
                writeLine(fields);
            }
                
            writer.Flush();
        }
Exemplo n.º 2
0
 public void should_return_attribute_metadata(string name, bool exists)
 {
     var children = new ObjectNode(new Context(Options.Create(x => x.IncludePublicFields()), 
         Mode.Serialize, "xml"), null, new SimpleValue(new MemberMetadata 
         { EmptyProperty = "", Property = "", Field = "", EmptyField = "" }, 
         typeof(MemberMetadata).ToCachedType()), null, null);
         
     children.GetNode(name).Metadata.Contains<XmlAttributeAttribute>().ShouldEqual(exists);
 }