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
-