使用空对象“{}”反序列化字符串属性

时间:2016-10-31 11:04:20

标签: c# json.net

我使用一个外部服务,它为字符串属性响应空对象“{}”。我可以使用一些属性来避免异常吗?

void should_deserialize()
{
    var json = "{ \"p1\": {} }";
    var res = JsonConvert.DeserializeObject<T1>(json);
}

class T1
{
    public string P1 { get; set; }
}

1 个答案:

答案 0 :(得分:6)

您可以使用隐藏的支持字段来解决此问题:

class T1
{
    [JsonProperty("p1")]
    private object _p1;

    [JsonIgnore]
    public string P1
    {
        get { return _p1 as string; }
        set { _p1 = value; }
    }
}

var json = "{ \"p1\": {} }";
// res.P1 is null
var res = JsonConvert.DeserializeObject<T1>(json);

var json2 = "{ \"p1\": \"hello\" }";
// res2.P1 is "hello"
var res2 = JsonConvert.DeserializeObject<T1>(json2);