using System.Collections.Generic;
public struct PrivateCapabilities
public static readonly PrivateCapabilities Admin = new PrivateCapabilities(0x000001);
private BigInteger Value { get; set; }
private PrivateCapabilities(BigInteger value)
public struct PrivateSetterCapabilities
public static readonly PrivateSetterCapabilities Admin = new PrivateSetterCapabilities(0x000001);
public BigInteger Value { get; private set; }
private PrivateSetterCapabilities(BigInteger value)
public struct PrivateWithAttributeCapabilities
public static readonly PrivateWithAttributeCapabilities Admin = new PrivateWithAttributeCapabilities(0x000001);
private BigInteger Value { get; set; }
private PrivateWithAttributeCapabilities(BigInteger value)
public static void Main()
var settings = new JsonSerializerSettings { };
Console.WriteLine("First Scenario: Private properties.");
var serializedA = JsonConvert.SerializeObject(PrivateCapabilities.Admin, settings);
var resultA = JsonConvert.DeserializeObject<PrivateCapabilities>(serializedA, settings);
Console.WriteLine("Serialized object: " + serializedA);
Console.WriteLine("Deserialized json: " + JsonConvert.SerializeObject(resultA));
Console.WriteLine("Second Scenario: Public property with private setter");
var serializedB = JsonConvert.SerializeObject(PrivateSetterCapabilities.Admin, settings);
var resultB = JsonConvert.DeserializeObject<PrivateSetterCapabilities>(serializedB, settings);
Console.WriteLine("Serialized object: " + serializedB);
Console.WriteLine("Deserialized json: " + JsonConvert.SerializeObject(resultB));
Console.WriteLine("Third Scenario: Private property with JsonProperty Attribute, This could be a better approach to solve the issue");
var serializedC = JsonConvert.SerializeObject(PrivateWithAttributeCapabilities.Admin, settings);
var resultC = JsonConvert.DeserializeObject<PrivateWithAttributeCapabilities>(serializedB, settings);
Console.WriteLine("Serialized object: " + serializedC);
Console.WriteLine("Deserialized json: " + JsonConvert.SerializeObject(resultC));