`required` property with JSON serialization
- 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; }
}
```

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

---
Two more flaws there. I guess article is outdated?
### 1

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
Assessment
This issue has not been assessed yet.