dotnet / dotnet/docs

`required` property with JSON serialization

Open
#42,480 0 comments 0 reactions 0 assignees View on GitHub
:watch: Not Triaged dotnet-fundamentals/svc
Dominant language
No language data
Stars
4.8k
Forks
6.1k
Avg merge
15h 21m
Merged PRs (30d)
370

Description

### Type of issue

Typo

### Description

From https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/required-properties

> If you're using System.Text.Json serialization in [source generation](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/source-generation-modes#metadata-based-mode) mode. In this case, your code won't compile if you use the required modifier, as source generation occurs at compile time.

I made experiment.

```csharp
var properties = MyContext.Default.A.Properties;

foreach (JsonPropertyInfo one in properties)
{
Console.WriteLine ( $"{one.Name}, is required: {one.IsRequired}" );
}

[JsonSerializable ( typeof ( A ) )]
[JsonSourceGenerationOptions ( GenerationMode = JsonSourceGenerationMode.Default )]
public partial class MyContext : JsonSerializerContext { }

public class A
{
public required string Required { get; set; }
public string NotRequired { get; set; }
}
```

![Output](https://github.com/user-attachments/assets/431e85fe-c674-448a-ae72-f5863325ae11)

So, code compiled and is runnable. Further more `required` modifier is taken into account.

---

Maybe this was about to revolve around `JsonSourceGenerationMode.Serialization`. I mean with

```csharp
[JsonSerializable ( typeof ( A ) )]
[JsonSourceGenerationOptions ( GenerationMode = JsonSourceGenerationMode.Default )]
public partial class MyContext : JsonSerializerContext { }
```

`Console.WriteLine ( "Count: " + properties.Count );` produces output

![Output2](https://github.com/user-attachments/assets/5eb2e203-edc6-451b-a1b3-4b6fe305568a)
---

Two more flaws there. I guess article is outdated?

### 1
![Flaw](https://github.com/user-attachments/assets/95e817fa-9063-4f64-98e0-29971a310a8a)

I think that these 2 should match.

### 2
> From the serializer's perspective, these **two** demarcations are equivalent and both map to the same piece of metadata, which is [JsonPropertyInfo.IsRequired](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.serialization.metadata.jsonpropertyinfo.isrequired#system-text-json-serialization-metadata-jsonpropertyinfo-isrequired).

This accounts to 3-point list.

### Page URL

https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/required-properties

### Content source URL

https://github.com/dotnet/docs/blob/main/docs/standard/serialization/system-text-json/required-properties.md

### Document Version Independent Id

c181fde6-e111-f097-1ea6-9d3bcf1777d5

### Article author

@gewarren

### Metadata

* ID: 9cea2289-c676-96af-e600-c64f55e88905
* Service: **dotnet-fundamentals**

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.