using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class MyProtobufObject
public Google.Protobuf.WellKnownTypes.Timestamp openingDatetime {get;set;}
public class TimeStampContractResolver : DefaultContractResolver
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
var property = base.CreateProperty(member, memberSerialization);
if (property.PropertyType == typeof(DateTime))
property.Converter = new TimeStampConverter();
public class TimeStampConverter : DateTimeConverterBase
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
DateTime date = DateTime.Parse(reader.Value.ToString());
return Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(date).ToString();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
writer.WriteValue(((Google.Protobuf.WellKnownTypes.Timestamp)value).ToString());
public static void Main()
string sDate = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow).ToString();
Console.WriteLine(sDate);
string myJsonBodyRequest = "{\"openingDatetime\":"+sDate+"}";
Console.WriteLine(myJsonBodyRequest);
MyProtobufObject myObjectWithConverter = JsonConvert.DeserializeObject<MyProtobufObject>(myJsonBodyRequest, new JsonSerializer()
ContractResolver = new TimeStampContractResolver(),
MyProtobufObject myObjectWithoutConverter = JsonConvert.DeserializeObject<MyProtobufObject>(myJsonBodyRequest);