public ObjectBlock BlockFor(object input, BlockWritingContext context, string objectName = null) { Accessor implicitAccessor = null; var type = input.GetType(); if (context.Accessor != null) { var parentSettings = _blocks.SettingsFor(context.Accessor.OwnerType); implicitAccessor = parentSettings.FindImplicitValue(type); } var implicitValue = implicitAccessor != null ? implicitAccessor.GetValue(input).ToString() : null; var properties = _cache.GetPropertiesFor(type).Values; var settings = _blocks.SettingsFor(type); return(new ObjectBlock { Blocks = properties .Where(x => !settings.ShouldIgnore(input, new SingleProperty(x))) .Where(x => x.GetValue(input, null) != null && !isImplicitValue(x, implicitAccessor)) .Select(x => { context.StartProperty(x); var writer = _writerLibrary.WriterFor(context); var block = writer.Write(context); context.FinishProperty(); return block; }).ToList(), Name = _blocks.NameFor(new BlockToken(objectName)), ImplicitValue = implicitValue }); }
private BlockWritingContext contextFor(Expression <Func <WritingTarget, object> > expression, WritingTarget target) { return(BlockWritingContext.ContextFor(expression, target)); }
public IBlock Write(BlockWritingContext context) { return(context.Writer.BlockFor(context.RawValue, context.Token.Value)); }
public ObjectBlock BlockFor(object input, string objectName = null) { var context = new BlockWritingContext(_services, this, _blocks, input); return(BlockFor(input, context, objectName)); }
public bool Matches(BlockWritingContext context) { return(true); }