Skip to content

Instantly share code, notes, and snippets.

@Herbstein
Last active September 16, 2016 09:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Herbstein/9ea14e2a4d95dd5aa4430384bfeeedf3 to your computer and use it in GitHub Desktop.
Save Herbstein/9ea14e2a4d95dd5aa4430384bfeeedf3 to your computer and use it in GitHub Desktop.
namespace MCVE {
using System;
using System.Reflection;
using JsonNet.PrivateSettersContractResolvers;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
internal struct RootObject {
private string name { get; set; }
public string ExampleGetter => name;
}
internal class Program {
private static void Main(string[] args) {
var jsonString = @"{ 'name': 'Generic Rocket' }";
var privateResolverSettings = new JsonSerializerSettings { ContractResolver = new PrivateResolver() };
var outsideResolver = new JsonSerializerSettings { ContractResolver = new PrivateSetterContractResolver() };
//var deserialized = JsonConvert.DeserializeObject<RootObject>(jsonString);
//var deserialized = JsonConvert.DeserializeObject<RootObject>(jsonString, outsideResolver);
var deserialized = JsonConvert.DeserializeObject<RootObject>(jsonString, privateResolverSettings);
Console.WriteLine(deserialized.ExampleGetter);
}
}
internal class PrivateResolver : DefaultContractResolver {
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
var prop = base.CreateProperty(member, memberSerialization);
if (!prop.Writable) {
var property = member as PropertyInfo;
if (property != null) {
var hasPrivateSetter = property.GetSetMethod(true) != null;
prop.Writable = hasPrivateSetter;
}
}
return prop;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment