The RepresentationBuilder class allows you to build HypermediaRepresentation objects using a simple interface, instead of worrying about manually setting properties on the HypermediaRepresentation object. This is the preferred and recommended way of constructing HypermediaRepresentation objects.
Example usage:
IRepresentationBuilder builder = new RepresentationBuilder();
builder.SetSelfLink("/api/objects/1"); // set the self link
builder.SetAttributesFromObject(myObject); // myObject is a model class
builder.AddTransition("parent", "/api/parent_objects/2"); // adds a transition
// create an embedded resource
IRepresentationBuilder embeddedResourceBuilder = new RepresentationBuilder();
embeddedResourceBuilder.SetAttributesFromObject(myEmbeddedResource);
embeddedResourceBuilder.SetSelfLink("/api/embedded_resources/3");
// add the embedded resource to the builder
builder.AddEmbeddedResource("child", embeddedResourceBuilder.ToRepresentation());
// get the Representation object
var Representation = builder.ToRepresentation();
// you can then use a serializer
var serializer = new HalSerializer();
var json = serializer.Serialize(Representation);You should whenever possible use the IRepresentationBuilder interface and not depend on the concrete class. Try hooking up your favorite DI framework.
The following methods are available on IRepresentationBuilder.
Create a HypermediaRepresentation object from this builder instance. Returns a HypermediaRepresentation object.
Sets the Self Link on the HypermediaRepresentation object that you are building
| Param | Description |
|---|---|
| self | The Self Link Uri |
Sets the HypermediaRepresentation attributes from a JSON.NET JObject.
| Param | Description |
|---|---|
| attributes | A JSON.NET JObject |
Sets the HypermediaRepresentation attributes from an abitrary object. This object will be internally converted into a JObject using JSON.NET, so all standard JSON.NET attributes apply.
| Param | Description |
|---|---|
| data | An object, Model, ViewModel etc |
Adds a HypermediaTransition to the current HypermediaRepresentation that you are building.
| Param | Description |
|---|---|
| transition | A HypermediaTransition object |
void AddTransition(string rel, string uri = null, string title = null, string type = null, bool uriIsTemplated = false, string depreciationUri = null, string name = null, string profileUri = null, string languageTag = null)
Adds a transition to the current HypermediaRepresentation that you are building.
| Param | Description |
|---|---|
| rel | The link relation. |
| uri | The Uri of the transition |
| title | The title of the transition |
| type | The type of the transition |
| uriIsTemplated | True if the Uri is a templated Uri, false if not. |
| depreciationUri | If the transition has been deprecated, a link to a Uri explaining the deprecation |
| name | The name of the transition. Can be used as an alternative or subcategory of title. |
| profileUri | Uri to an http://alps.io/ or similar profile. |
| languageTag | Language of the transition, as per RFC 5988 http://tools.ietf.org/html/rfc5988 |
Adds an embedded resource. There can be multiple resources with the same key, in which case a collection of resources will be built.
| Param | Description |
|---|---|
| key | The embedded resource key |
| resource | The embedded resource as represented by a HypermediaRepresentation |
Sets the HypermediaRepresentation you are building to be a collection instead of a single object.
| Param | Description |
|---|---|
| Representations | An enumerable of HypermediaRepresentations |
Sets the HypermediaRepresentation you are building to be a collection instead of a single object.
Example use:
public class MyObject {
public int Id { get; set;}
public string Name { get; set;}
}
var myObjectCollection = new List<MyObject> {
new MyObject { Id = 1, Name = "Brian"},
new MyObject { Id = 2, Name = "Terrance"}
};
IRepresentationBuilder builder = new RepresentationBuilder();
builder.SetCollection(myObjectCollection, o => "api/objects/" + o.Id);| Param | Description |
|---|---|
| Type T | The type of the object contained in the collection, such as a Model or ViewModel type |
| collection | The collection of objects that represent the collection. JSON.NET will be used to serialize the objects, so the objects can have standard JSON.NET attributes. |
| selfLinkFunc | A function that defines the Self Link. This will be called on each object to populate the Self Link of the HypermediaRepresentation. |