Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [JsonProperty("title",Required=Required.Always,Order=1)]
- public string Title { get; set; }
- [JsonProperty("date",Order=3)]
- [JsonConverter(typeof(IsoDateTimeConverter))]
- public DateTime Date { get; set; }
- [JsonProperty(Order=2)]
- [JsonConverter(typeof(TypeIdentifierJsonConverter))]
- public TypeIdentifier DocTypeIdentifier { get; set; }
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- TypeIdentifier docTypeId;
- id= (TypeIdentifier) value;
- writer.WritePropertyName(id.ParameterName);
- writer.WriteValue(id.Value);
- }
- [JsonObject(MemberSerialization.OptIn)]
- class Document
- {
- [JsonProperty("title", Required = Required.Always, Order = 1)]
- public string Title { get; set; }
- [JsonProperty("date", Order = 3)]
- [JsonConverter(typeof(IsoDateTimeConverter))]
- public DateTime Date { get; set; }
- [JsonProperty(Order = 2)]
- public TypeIdentifier DocTypeIdentifier { get; set; }
- public string OtherStuff { get; set; }
- }
- class TypeIdentifier
- {
- public string Value { get; set; }
- public string ParameterName { get; set; }
- }
- class DocumentConverter : JsonConverter
- {
- public override bool CanConvert(Type objectType)
- {
- return (objectType == typeof(Document));
- }
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- Document doc = (Document)value;
- // Create a JObject from the document, respecting existing JSON attribs
- JObject jo = JObject.FromObject(value);
- // At this point the DocTypeIdentifier is not serialized correctly.
- // Fix it by replacing the property with the correct name and value.
- JProperty prop = jo.Children<JProperty>()
- .Where(p => p.Name == "DocTypeIdentifier")
- .First();
- prop.AddAfterSelf(new JProperty(doc.DocTypeIdentifier.ParameterName,
- doc.DocTypeIdentifier.Value));
- prop.Remove();
- // Write out the JSON
- jo.WriteTo(writer);
- }
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- throw new NotImplementedException();
- }
- }
- JsonSerializerSettings settings = new JsonSerializerSettings();
- settings.Converters.Add(new DocumentConverter());
- string json = JsonConvert.SerializeObject(doc, settings);
- class Program
- {
- static void Main(string[] args)
- {
- Document doc = new Document
- {
- Title = "How to write a JSON converter",
- Date = DateTime.Today,
- DocTypeIdentifier = new TypeIdentifier
- {
- ParameterName = "type_id",
- Value = "26"
- },
- OtherStuff = "this should not appear in the JSON"
- };
- JsonSerializerSettings settings = new JsonSerializerSettings();
- settings.Converters.Add(new DocumentConverter());
- settings.Formatting = Formatting.Indented;
- string json = JsonConvert.SerializeObject(doc, settings);
- Console.WriteLine(json);
- }
- }
- {
- "title": "How to write a JSON converter",
- "type_id": "26",
- "date": "2014-03-28T00:00:00-05:00"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement