I have the following C# class:
public RuleCondition(string field,
Operator @operator,
RightValueExpression rightValueExpression)
{
_operator = @operator;
_field = field;
_rightValueExpression = rightValueExpression;
}
public RightValueExpression ValueExpression => _rightValueExpression;
public string Field => _field;
public Operator Operator => _operator;
}
public sealed class RightValueExpression
{
private readonly bool _relativeToBaseline;
private readonly double _value;
private readonly RightOperator _operator;
private readonly PercentOrAbsolute _isPercent;
public RightValueExpression(bool relativeToBaseline,
RightOperator @operator,
double value,
PercentOrAbsolute isPercent)
{
_isPercent = isPercent;
_operator = @operator;
_value = value;
_relativeToBaseline = relativeToBaseline;
}
public PercentOrAbsolute IsPercent => _isPercent;
public RightOperator Operator => _operator;
public double Value => _value;
public bool RelativeToBaseline => _relativeToBaseline;
}
public enum Operator
{
GreaterThan,
EqualTo,
LessThan,
GreaterThanEqualTo,
LessThanEqualTo
}
public enum RightOperator
{
Plus,
Minus,
Times,
DividedBy
}
public enum PercentOrAbsolute
{
Percent,
Absolute
}
When serialized to Json using Json.Net, I get the following:
var ruleCondition = new RuleCondition("Min", Operator.GreaterThan, new RightValueExpression(relativeToBaseline: true, RightOperator.Plus, 50, PercentOrAbsolute.Percent));
var json = JsonConvert.SerializeObject(ruleCondition);
Json:
{
"ValueExpression": {
"IsPercent": 0,
"Operator": 0,
"Value": 50.0,
"RelativeToBaseline": true
},
"Field": "Min",
"Operator": 0
}
All fine, however deserializing using Json.Net
var des = JsonConvert.DeserializeObject<RuleCondition>(json);
RightValueExpression
in RuleCondition is always null.
Do I need a custom deserializer here?