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