简体   繁体   English

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

[英]Deserialize string property with empty object “{}”

I consume an external service that it responses empty object "{}" for a string property. 我使用了一个外部服务,它为字符串属性响应空对象“ {}”。 Could I use some attribute to avoid the exception? 我可以使用一些属性来避免异常吗?

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

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

You can use a hidden backing field to circumvent this problem: 您可以使用隐藏的后备字段来解决此问题:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM