Skip to content

Commit 9f9f1ab

Browse files
committed
Added annotations to JsonApiObject types
1 parent c4b2d17 commit 9f9f1ab

19 files changed

+64
-2
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
56
using JsonApiDotNetCore.Resources;
67

78
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
89

10+
// Types in the current namespace are never touched by ASP.NET ModelState validation, therefore using a non-nullable reference type for a property does not
11+
// imply this property is required. Instead, we use [Required] explicitly, because this is how Swashbuckle is instructed to mark properties as required.
912
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1013
internal sealed class NullableResourceIdentifierResponseDocument<TResource> : NullableSingleData<ResourceIdentifierObject<TResource>>
1114
where TResource : IIdentifiable
1215
{
16+
[JsonPropertyName("meta")]
1317
public IDictionary<string, object> Meta { get; set; } = null!;
1418

19+
[JsonPropertyName("jsonapi")]
1520
public JsonapiObject Jsonapi { get; set; } = null!;
1621

1722
[Required]
23+
[JsonPropertyName("links")]
1824
public LinksInResourceIdentifierDocument Links { get; set; } = null!;
1925
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Documents/NullableSecondaryResourceResponseDocument.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -10,10 +11,13 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
1011
internal sealed class NullableSecondaryResourceResponseDocument<TResource> : NullableSingleData<ResourceObjectInResponse<TResource>>
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("meta")]
1315
public IDictionary<string, object> Meta { get; set; } = null!;
1416

17+
[JsonPropertyName("jsonapi")]
1518
public JsonapiObject Jsonapi { get; set; } = null!;
1619

1720
[Required]
21+
[JsonPropertyName("links")]
1822
public LinksInResourceDocument Links { get; set; } = null!;
1923
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
56
using JsonApiDotNetCore.Resources;
67

78
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
89

9-
// Types in the current namespace are never touched by ASP.NET ModelState validation, therefore using a non-nullable reference type for a property does not
10-
// imply this property is required. Instead, we use [Required] explicitly, because this is how Swashbuckle is instructed to mark properties as required.
1110
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1211
internal sealed class PrimaryResourceResponseDocument<TResource> : SingleData<ResourceObjectInResponse<TResource>>
1312
where TResource : IIdentifiable
1413
{
14+
[JsonPropertyName("meta")]
1515
public IDictionary<string, object> Meta { get; set; } = null!;
1616

17+
[JsonPropertyName("jsonapi")]
1718
public JsonapiObject Jsonapi { get; set; } = null!;
1819

1920
[Required]
21+
[JsonPropertyName("links")]
2022
public LinksInResourceDocument Links { get; set; } = null!;
2123
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Documents/ResourceCollectionResponseDocument.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -10,10 +11,13 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
1011
internal sealed class ResourceCollectionResponseDocument<TResource> : ManyData<ResourceObjectInResponse<TResource>>
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("meta")]
1315
public IDictionary<string, object> Meta { get; set; } = null!;
1416

17+
[JsonPropertyName("jsonapi")]
1518
public JsonapiObject Jsonapi { get; set; } = null!;
1619

1720
[Required]
21+
[JsonPropertyName("links")]
1822
public LinksInResourceCollectionDocument Links { get; set; } = null!;
1923
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Documents/ResourceIdentifierCollectionResponseDocument.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -10,10 +11,13 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
1011
internal sealed class ResourceIdentifierCollectionResponseDocument<TResource> : ManyData<ResourceIdentifierObject<TResource>>
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("meta")]
1315
public IDictionary<string, object> Meta { get; set; } = null!;
1416

17+
[JsonPropertyName("jsonapi")]
1518
public JsonapiObject Jsonapi { get; set; } = null!;
1619

1720
[Required]
21+
[JsonPropertyName("links")]
1822
public LinksInResourceIdentifierCollectionDocument Links { get; set; } = null!;
1923
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Documents/ResourceIdentifierResponseDocument.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -10,10 +11,13 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
1011
internal sealed class ResourceIdentifierResponseDocument<TResource> : SingleData<ResourceIdentifierObject<TResource>>
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("meta")]
1315
public IDictionary<string, object> Meta { get; set; } = null!;
1416

17+
[JsonPropertyName("jsonapi")]
1518
public JsonapiObject Jsonapi { get; set; } = null!;
1619

1720
[Required]
21+
[JsonPropertyName("links")]
1822
public LinksInResourceIdentifierDocument Links { get; set; } = null!;
1923
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Documents/SecondaryResourceResponseDocument.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -10,10 +11,13 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents;
1011
internal sealed class SecondaryResourceResponseDocument<TResource> : SingleData<ResourceObjectInResponse<TResource>>
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("meta")]
1315
public IDictionary<string, object> Meta { get; set; } = null!;
1416

17+
[JsonPropertyName("jsonapi")]
1518
public JsonapiObject Jsonapi { get; set; } = null!;
1619

1720
[Required]
21+
[JsonPropertyName("links")]
1822
public LinksInResourceDocument Links { get; set; } = null!;
1923
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
1+
using System.Text.Json.Serialization;
12
using JetBrains.Annotations;
23

34
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects;
45

56
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
67
internal sealed class JsonapiObject
78
{
9+
[JsonPropertyName("version")]
810
public string Version { get; set; } = null!;
911

12+
[JsonPropertyName("ext")]
1013
public ICollection<string> Ext { get; set; } = null!;
1114

15+
[JsonPropertyName("profile")]
1216
public ICollection<string> Profile { get; set; } = null!;
1317

18+
[JsonPropertyName("meta")]
1419
public IDictionary<string, object> Meta { get; set; } = null!;
1520
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ManyData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
45

@@ -9,5 +10,6 @@ internal abstract class ManyData<TData>
910
where TData : ResourceIdentifierObject
1011
{
1112
[Required]
13+
[JsonPropertyName("data")]
1214
public ICollection<TData> Data { get; set; } = null!;
1315
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/NullableSingleData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
45

@@ -9,5 +10,6 @@ internal abstract class NullableSingleData<TData>
910
where TData : ResourceIdentifierObject
1011
{
1112
[Required]
13+
[JsonPropertyName("data")]
1214
public TData? Data { get; set; }
1315
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Relationships/NullableToOneRelationshipInResponse.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -11,7 +12,9 @@ internal sealed class NullableToOneRelationshipInResponse<TResource> : NullableS
1112
where TResource : IIdentifiable
1213
{
1314
[Required]
15+
[JsonPropertyName("links")]
1416
public LinksInRelationshipObject Links { get; set; } = null!;
1517

18+
[JsonPropertyName("meta")]
1619
public IDictionary<string, object> Meta { get; set; } = null!;
1720
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Relationships/ToManyRelationshipInResponse.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -11,7 +12,9 @@ internal sealed class ToManyRelationshipInResponse<TResource> : ManyData<Resourc
1112
where TResource : IIdentifiable
1213
{
1314
[Required]
15+
[JsonPropertyName("links")]
1416
public LinksInRelationshipObject Links { get; set; } = null!;
1517

18+
[JsonPropertyName("meta")]
1619
public IDictionary<string, object> Meta { get; set; } = null!;
1720
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/Relationships/ToOneRelationshipInResponse.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -11,7 +12,9 @@ internal sealed class ToOneRelationshipInResponse<TResource> : SingleData<Resour
1112
where TResource : IIdentifiable
1213
{
1314
[Required]
15+
[JsonPropertyName("links")]
1416
public LinksInRelationshipObject Links { get; set; } = null!;
1517

18+
[JsonPropertyName("meta")]
1619
public IDictionary<string, object> Meta { get; set; } = null!;
1720
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ResourceObjects/ResourceIdentifierObject.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.Resources;
45

@@ -14,8 +15,10 @@ internal sealed class ResourceIdentifierObject<TResource> : ResourceIdentifierOb
1415
internal class ResourceIdentifierObject
1516
{
1617
[Required]
18+
[JsonPropertyName("type")]
1719
public string Type { get; set; } = null!;
1820

1921
[Required]
22+
[JsonPropertyName("id")]
2023
public string Id { get; set; } = null!;
2124
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ResourceObjects/ResourceObjectInPatchRequest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Text.Json.Serialization;
12
using JetBrains.Annotations;
23
using JsonApiDotNetCore.Resources;
34

@@ -7,7 +8,9 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
78
internal sealed class ResourceObjectInPatchRequest<TResource> : ResourceIdentifierObject
89
where TResource : IIdentifiable
910
{
11+
[JsonPropertyName("attributes")]
1012
public AttributesInPatchRequest<TResource> Attributes { get; set; } = null!;
1113

14+
[JsonPropertyName("relationships")]
1215
public RelationshipsInPatchRequest<TResource> Relationships { get; set; } = null!;
1316
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ResourceObjects/ResourceObjectInPostRequest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Text.Json.Serialization;
12
using JetBrains.Annotations;
23
using JsonApiDotNetCore.Resources;
34

@@ -7,7 +8,9 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
78
internal sealed class ResourceObjectInPostRequest<TResource> : ResourceIdentifierObject
89
where TResource : IIdentifiable
910
{
11+
[JsonPropertyName("attributes")]
1012
public AttributesInPostRequest<TResource> Attributes { get; set; } = null!;
1113

14+
[JsonPropertyName("relationships")]
1215
public RelationshipsInPostRequest<TResource> Relationships { get; set; } = null!;
1316
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ResourceObjects/ResourceObjectInResponse.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
45
using JsonApiDotNetCore.Resources;
@@ -9,12 +10,16 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
910
internal sealed class ResourceObjectInResponse<TResource> : ResourceIdentifierObject
1011
where TResource : IIdentifiable
1112
{
13+
[JsonPropertyName("attributes")]
1214
public AttributesInResponse<TResource> Attributes { get; set; } = null!;
1315

16+
[JsonPropertyName("relationships")]
1417
public RelationshipsInResponse<TResource> Relationships { get; set; } = null!;
1518

1619
[Required]
20+
[JsonPropertyName("links")]
1721
public LinksInResourceObject Links { get; set; } = null!;
1822

23+
[JsonPropertyName("meta")]
1924
public IDictionary<string, object> Meta { get; set; } = null!;
2025
}

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/SingleData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel.DataAnnotations;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
45

@@ -9,5 +10,6 @@ internal abstract class SingleData<TData>
910
where TData : ResourceIdentifierObject
1011
{
1112
[Required]
13+
[JsonPropertyName("data")]
1214
public TData Data { get; set; } = null!;
1315
}

0 commit comments

Comments
 (0)