Adds support for mapping properties using JSONPath queries with Newtonsoft.Json.
Install the package JsonExts.JsonPath from NuGet or install it from the Package Manager Console:
PM> Install-Package JsonExts.JsonPath
Add [JsonPath(string)] to properties of your model and add [JsonConverter(typeof(JsonPathObjectConverter))] to your model.
Here's an example model:
[JsonConverter(typeof(JsonPathObjectConverter))]
public class Book
{
[JsonPath("price")]
public double Price { get; set; }
[JsonPath("info.author")]
public string Author { get; set; }
[JsonPath("info.related[0].title")]
public string FirstRelatedTitle { get; set; }
[JsonPath("info.related[*].title")]
public List<string> RelatedTitles { get; set; }
}Example JSON being deserialized:
{
"price": 10.0,
"info": {
"title": "Leviathan Wakes",
"author": "James S. A. Corey",
"related": [
{ "title": "Caliban's War" },
{ "title": "Abaddon's Gate" },
{ "title": "Cibola Burn" },
{ "title": "Nemesis Games" },
{ "title": "Babylon's Ashes" },
{ "title": "Persepolis Rising" },
{ "title": "Tiamat's Wrath" }
]
}
}Deserialize the JSON to your model like normal using JsonConvert.DeserializeObject() or a JsonSerializer.
var book = JsonConvert.DeserializeObject<Book>(json);Alternatively you can leave out the [JsonConverter] attribute on the model and instead specify it when deserializing (or on JsonSerializerSettings).
public class Book
{
...
}
// Add JsonPathObjectConverter to the collection of converters used
var book = JsonConvert.DeserializeObject<Book>(json, new JsonPathObjectConverter())Serializing book back to JSON again will then result in this:
{
"price": 10.0,
"author": "James S. A. Corey",
"firstRelatedTitle": "Caliban's War",
"relatedTitles": [
"Caliban's War",
"Abaddon's Gate",
"Cibola Burn",
"Nemesis Games",
"Babylon's Ashes",
"Persepolis Rising",
"Tiamat's Wrath"
]
}-
[JsonConverter]- Supported on both regular properties and combined with
[JsonPath].
- Supported on both regular properties and combined with
-
[DefaultValue]- Supported on both regular properties and combined with
[JsonPath].
- Supported on both regular properties and combined with
-
[JsonIgnore]- Only supported on regular properties, not supported combined with
[JsonPath].
- Only supported on regular properties, not supported combined with
-
[JsonProperty]features supported when combined with[JsonPath]:-
ItemConverterType -
NullValueHandling -
DefaultValueHandling -
NamingStrategyType -
MissingMemberHandling -
ReferenceLoopHandling -
ObjectCreationHandling -
TypeNameHandling -
Required
-