Converting to JSON and accessing metadata

Entities passed to a transformer can be converted to JSON using the AsDocument method; there is also a possibility to access metadata for a specified object using MetadataFor method.

AsDocument - converting to JSON

public class Products_AsDocument : AbstractTransformerCreationTask<Product>
{
	public class Result
	{
		public RavenJObject RawDocument { get; set; }
	}

	public Products_AsDocument()
	{
		TransformResults = products => from product in products
						select new
						{
							RawDocument = AsDocument(product)
						};
	}
}

IList<Products_AsDocument.Result> results = session
	.Query<Product>()
	.TransformWith<Products_AsDocument, Products_AsDocument.Result>()
	.ToList();

MetadataFor - accessing metadata

public class Products_WithMetadata : AbstractTransformerCreationTask<Product>
{
	public class Result
	{
		public Product Product { get; set; }

		public string EntityName { get; set; }

		public string ClrType { get; set; }
	}

	public Products_WithMetadata()
	{
		TransformResults = products => from product in products
						let metadata = MetadataFor(product)
						select new
						{
							Product = product,
							EntityName = metadata.Value<string>("Raven-Entity-Name"),
							ClrType = metadata.Value<string>("Raven-Clr-Type")
						};
	}
}

IList<Products_WithMetadata.Result> results = session
	.Query<Product>()
	.TransformWith<Products_WithMetadata, Products_WithMetadata.Result>()
	.ToList();