Skip to content

Commit 9963cdf

Browse files
committed
Added annotations to JsonApiObject types
1 parent aa90296 commit 9963cdf

19 files changed

+72
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
12+
// 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
13+
// imply this property is required. Instead, we use [Required] explicitly, because this is how Swashbuckle is instructed to mark properties as required.
1014
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1115
internal sealed class NullableResourceIdentifierResponseDocument<TResource> : NullableSingleData<ResourceIdentifierObject<TResource>>
1216
where TResource : IIdentifiable
1317
{
18+
[JsonPropertyName("meta")]
1419
public IDictionary<string, object> Meta { get; set; } = null!;
1520

21+
[JsonPropertyName("jsonapi")]
1622
public JsonapiObject Jsonapi { get; set; } = null!;
1723

1824
[Required]
25+
[JsonPropertyName("links")]
1926
public LinksInResourceIdentifierDocument Links { get; set; } = null!;
2027
}
2128
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
1012
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1113
internal sealed class NullableSecondaryResourceResponseDocument<TResource> : NullableSingleData<ResourceObjectInResponse<TResource>>
1214
where TResource : IIdentifiable
1315
{
16+
[JsonPropertyName("meta")]
1417
public IDictionary<string, object> Meta { get; set; } = null!;
1518

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

1822
[Required]
23+
[JsonPropertyName("links")]
1924
public LinksInResourceDocument Links { get; set; } = null!;
2025
}
2126
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
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.
1212
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1313
internal sealed class PrimaryResourceResponseDocument<TResource> : SingleData<ResourceObjectInResponse<TResource>>
1414
where TResource : IIdentifiable
1515
{
16+
[JsonPropertyName("meta")]
1617
public IDictionary<string, object> Meta { get; set; } = null!;
1718

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

2022
[Required]
23+
[JsonPropertyName("links")]
2124
public LinksInResourceDocument Links { get; set; } = null!;
2225
}
2326
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
1012
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1113
internal sealed class ResourceCollectionResponseDocument<TResource> : ManyData<ResourceObjectInResponse<TResource>>
1214
where TResource : IIdentifiable
1315
{
16+
[JsonPropertyName("meta")]
1417
public IDictionary<string, object> Meta { get; set; } = null!;
1518

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

1822
[Required]
23+
[JsonPropertyName("links")]
1924
public LinksInResourceCollectionDocument Links { get; set; } = null!;
2025
}
2126
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
1012
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1113
internal sealed class ResourceIdentifierCollectionResponseDocument<TResource> : ManyData<ResourceIdentifierObject<TResource>>
1214
where TResource : IIdentifiable
1315
{
16+
[JsonPropertyName("meta")]
1417
public IDictionary<string, object> Meta { get; set; } = null!;
1518

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

1822
[Required]
23+
[JsonPropertyName("links")]
1924
public LinksInResourceIdentifierCollectionDocument Links { get; set; } = null!;
2025
}
2126
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
1012
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1113
internal sealed class ResourceIdentifierResponseDocument<TResource> : SingleData<ResourceIdentifierObject<TResource>>
1214
where TResource : IIdentifiable
1315
{
16+
[JsonPropertyName("meta")]
1417
public IDictionary<string, object> Meta { get; set; } = null!;
1518

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

1822
[Required]
23+
[JsonPropertyName("links")]
1924
public LinksInResourceIdentifierDocument Links { get; set; } = null!;
2025
}
2126
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
67
using JsonApiDotNetCore.Resources;
8+
using JsonApiDotNetCore.Serialization.Objects;
79

810
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents
911
{
1012
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1113
internal sealed class SecondaryResourceResponseDocument<TResource> : SingleData<ResourceObjectInResponse<TResource>>
1214
where TResource : IIdentifiable
1315
{
16+
[JsonPropertyName("meta")]
1417
public IDictionary<string, object> Meta { get; set; } = null!;
1518

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

1822
[Required]
23+
[JsonPropertyName("links")]
1924
public LinksInResourceDocument Links { get; set; } = null!;
2025
}
2126
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
using System.Collections.Generic;
2+
using System.Text.Json.Serialization;
23
using JetBrains.Annotations;
34

45
namespace JsonApiDotNetCore.OpenApi.JsonApiObjects
56
{
67
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
78
internal sealed class JsonapiObject
89
{
10+
[JsonPropertyName("version")]
911
public string Version { get; set; } = null!;
1012

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

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

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

src/JsonApiDotNetCore.OpenApi/JsonApiObjects/ManyData.cs

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

@@ -10,6 +11,7 @@ internal abstract class ManyData<TData>
1011
where TData : ResourceIdentifierObject
1112
{
1213
[Required]
14+
[JsonPropertyName("data")]
1315
public ICollection<TData> Data { get; set; } = null!;
1416
}
1517
}

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -12,8 +13,10 @@ internal sealed class NullableToOneRelationshipInResponse<TResource> : NullableS
1213
where TResource : IIdentifiable
1314
{
1415
[Required]
16+
[JsonPropertyName("links")]
1517
public LinksInRelationshipObject Links { get; set; } = null!;
1618

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -12,8 +13,10 @@ internal sealed class ToManyRelationshipInResponse<TResource> : ManyData<Resourc
1213
where TResource : IIdentifiable
1314
{
1415
[Required]
16+
[JsonPropertyName("links")]
1517
public LinksInRelationshipObject Links { get; set; } = null!;
1618

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -12,8 +13,10 @@ internal sealed class ToOneRelationshipInResponse<TResource> : SingleData<Resour
1213
where TResource : IIdentifiable
1314
{
1415
[Required]
16+
[JsonPropertyName("links")]
1517
public LinksInRelationshipObject Links { get; set; } = null!;
1618

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

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,9 +15,11 @@ 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
}
2225
}

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,8 +8,10 @@ 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
}
1417
}

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,8 +8,10 @@ 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
}
1417
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.ComponentModel.DataAnnotations;
3+
using System.Text.Json.Serialization;
34
using JetBrains.Annotations;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Links;
56
using JsonApiDotNetCore.Resources;
@@ -10,13 +11,17 @@ namespace JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects
1011
internal sealed class ResourceObjectInResponse<TResource> : ResourceIdentifierObject
1112
where TResource : IIdentifiable
1213
{
14+
[JsonPropertyName("attributes")]
1315
public AttributesInResponse<TResource> Attributes { get; set; } = null!;
1416

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

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

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

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

src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs renamed to src/JsonApiDotNetCore/Serialization/Objects/JsonapiObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace JsonApiDotNetCore.Serialization.Objects
88
/// See https://jsonapi.org/format/1.1/#document-jsonapi-object.
99
/// </summary>
1010
[PublicAPI]
11-
public sealed class JsonApiObject
11+
public sealed class JsonapiObject
1212
{
1313
[JsonPropertyName("version")]
1414
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]

0 commit comments

Comments
 (0)