I am trying to Deserialize json data which i have to with respect to model class i have
Json :
"{'test':'1339886'}"
Classes :
public class NewtonTest
{
public Element test { get; set; }
}
public class Element
{
public string sample { get; set; }
}
In Main class :
//under Main
string jsonData = "{'test':'1339886'}";
var = JsonConvert.DeserializeObject<NewtonTest>(jsonData);
Error Info : //innner exception
Could not cast or convert from System.String to Test.Element."
I am completely aware of what the error states as i am passing string
in my json
where as in class i have a class
as type(mismatch happening) .
In such cases i need to handle the error and maybe place a null if there is mismatch in output but it should not throw exception .
I tried my best reading the docs and setting options via settings but none seem to work .
I am using version 4.5 of Newtonsoft.Json
You can tell JSON.NET to ignore errors for specific members and types:
var settings = new JsonSerializerSettings
{
Error = (sender, args) =>
{
if (object.Equals(args.ErrorContext.Member, "test") &&
args.ErrorContext.OriginalObject.GetType() == typeof(NewtonTest))
{
args.ErrorContext.Handled = true;
}
}
};
NewtonTest test = JsonConvert.DeserializeObject<NewtonTest>(json, settings);
This code won't throw an exception. The Error
handler in the settings object will get called and if the member throwing the exception is named "test"
and belongs to NewtonTest
, the error gets skipped over and JSON.NET keeps going.
The ErrorContext
property also has other properties that you might want to leverage to only handle errors that you're absolutely sure you want to ignore.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With