--- lang: ja-jp breaks: true --- # `System.Text.Json` は、非パブリック(private)メンバのシリアライズデシリアライズをサポートしていない 2021-09-16 > Get .NET Core JsonSerializer to serialize private members > https://stackoverflow.com/questions/61869393/get-net-core-jsonserializer-to-serialize-private-members ```csharp= public struct Forecast { public DateTime Date { get; } [JsonPropertyName("celsius")] public int TemperatureC { get; } public string Summary { get; } [JsonConstructor] public Forecast(DateTime date, int temperatureC, string summary) => (Date, TemperatureC, Summary) = (date, temperatureC, summary); } ``` ```csharp= public class Forecast { public DateTime Date { get; init; } [JsonInclude] public int TemperatureC { get; private set; } [JsonInclude] public string Summary { private get; set; } }; ``` ```csharp= var json_options = new JsonSerializerOptions( JsonSerializerDefaults.Web ) { WriteIndented = true, IncludeFields = true }; var json = JsonSerializer.Serialize<SvcPsStartReqData>(req, json_options); Console.WriteLine(json); ``` :::info public であれば、`JsonInclude` 属性を付与することでフィールドメンバのシリアライズが可能だが、privateはダメ。 ::: ## privateメンバをシリアライズする場合は、`MessagePackSerializer.SerializeToJson`を使用した方が良い。 :::warning ただし、クラスに`[MessagePackObject(keyAsPropertyName: true)]`属性を付与するか、`ContractlessStandardResolverAllowPrivate`オプションを使用する必要がある。 ::: ###### tags: `System.Text.Json`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up