1+ using System ;
12using System . Collections . Generic ;
23using System . Linq ;
34using System . Threading . Tasks ;
@@ -11,14 +12,22 @@ namespace JSONAPI.Json
1112 /// </summary>
1213 public class ResourceCollectionDocumentFormatter : IResourceCollectionDocumentFormatter
1314 {
14- private readonly IResourceObjectFormatter _resourceObjectFormatter ;
15- private readonly IMetadataFormatter _metadataFormatter ;
15+ private IResourceObjectFormatter _resourceObjectFormatter ;
16+ private IMetadataFormatter _metadataFormatter ;
1617 private const string PrimaryDataKeyName = "data" ;
1718 private const string RelatedDataKeyName = "included" ;
1819 private const string MetaKeyName = "meta" ;
19-
20+
21+ /// <summary>
22+ /// Creates a ResourceCollectionDocumentFormatter
23+ /// </summary>
24+ public ResourceCollectionDocumentFormatter ( )
25+ {
26+
27+ }
28+
2029 /// <summary>
21- /// Creates a SingleResourceDocumentFormatter
30+ /// Creates a ResourceCollectionDocumentFormatter
2231 /// </summary>
2332 /// <param name="resourceObjectFormatter"></param>
2433 /// <param name="metadataFormatter"></param>
@@ -28,6 +37,40 @@ public ResourceCollectionDocumentFormatter(IResourceObjectFormatter resourceObje
2837 _metadataFormatter = metadataFormatter ;
2938 }
3039
40+ /// <summary>
41+ /// The formatter to use for resource objects found in this document
42+ /// </summary>
43+ /// <exception cref="InvalidOperationException"></exception>
44+ public IResourceObjectFormatter ResourceObjectFormatter
45+ {
46+ get
47+ {
48+ return _resourceObjectFormatter ?? ( _resourceObjectFormatter = new ResourceObjectFormatter ( ) ) ;
49+ }
50+ set
51+ {
52+ if ( _resourceObjectFormatter != null ) throw new InvalidOperationException ( "This property can only be set once." ) ;
53+ _resourceObjectFormatter = value ;
54+ }
55+ }
56+
57+ /// <summary>
58+ /// The formatter to use for document-level metadata
59+ /// </summary>
60+ /// <exception cref="InvalidOperationException"></exception>
61+ public IMetadataFormatter MetadataFormatter
62+ {
63+ get
64+ {
65+ return _metadataFormatter ?? ( _metadataFormatter = new MetadataFormatter ( ) ) ;
66+ }
67+ set
68+ {
69+ if ( _metadataFormatter != null ) throw new InvalidOperationException ( "This property can only be set once." ) ;
70+ _metadataFormatter = value ;
71+ }
72+ }
73+
3174 public Task Serialize ( IResourceCollectionDocument document , JsonWriter writer )
3275 {
3376 writer . WriteStartObject ( ) ;
@@ -37,7 +80,7 @@ public Task Serialize(IResourceCollectionDocument document, JsonWriter writer)
3780 writer . WriteStartArray ( ) ;
3881 foreach ( var resourceObject in document . PrimaryData )
3982 {
40- _resourceObjectFormatter . Serialize ( resourceObject , writer ) ;
83+ ResourceObjectFormatter . Serialize ( resourceObject , writer ) ;
4184 }
4285 writer . WriteEndArray ( ) ;
4386
@@ -47,15 +90,15 @@ public Task Serialize(IResourceCollectionDocument document, JsonWriter writer)
4790 writer . WriteStartArray ( ) ;
4891 foreach ( var resourceObject in document . RelatedData )
4992 {
50- _resourceObjectFormatter . Serialize ( resourceObject , writer ) ;
93+ ResourceObjectFormatter . Serialize ( resourceObject , writer ) ;
5194 }
5295 writer . WriteEndArray ( ) ;
5396 }
5497
5598 if ( document . Metadata != null )
5699 {
57100 writer . WritePropertyName ( MetaKeyName ) ;
58- _metadataFormatter . Serialize ( document . Metadata , writer ) ;
101+ MetadataFormatter . Serialize ( document . Metadata , writer ) ;
59102 }
60103
61104 writer . WriteEndObject ( ) ;
@@ -91,7 +134,7 @@ public async Task<IResourceCollectionDocument> Deserialize(JsonReader reader, st
91134 primaryData = await DeserializePrimaryData ( reader , currentPath + "/" + PrimaryDataKeyName ) ;
92135 break ;
93136 case MetaKeyName :
94- metadata = await _metadataFormatter . Deserialize ( reader , currentPath + "/" + MetaKeyName ) ;
137+ metadata = await MetadataFormatter . Deserialize ( reader , currentPath + "/" + MetaKeyName ) ;
95138 break ;
96139 default :
97140 reader . Skip ( ) ;
@@ -115,7 +158,7 @@ private async Task<IResourceObject[]> DeserializePrimaryData(JsonReader reader,
115158 if ( reader . TokenType == JsonToken . EndArray )
116159 break ;
117160
118- var resourceObject = await _resourceObjectFormatter . Deserialize ( reader , currentPath + "/" + index ) ;
161+ var resourceObject = await ResourceObjectFormatter . Deserialize ( reader , currentPath + "/" + index ) ;
119162 primaryData . Add ( resourceObject ) ;
120163
121164 index ++ ;
0 commit comments