使用Newtonsoft反序列化部分对象的最佳方法

时间:2017-09-27 09:37:40

标签: c# serialization json.net deserialization

免责声明:关于这个主题有很多主题,但到目前为止,我发现只有一个关于部分反序列化的主题thisone,已经有几年了

问题:在json.net中最简单的方法是什么,但没有太多开销,将部分JSON字符串反序列化为对象?

给定一个JSON对象:

{
    "message":"Login successful",
    "data":{
        "firstname":"John",
        "lastname":"Doe",
    }
}

和一个对象:

public class UserData
{
    [JsonProperty("firstname")]
    public string FirstName;

    [JsonProperty("lastname")]
    public string LastName;
}

比,你可以使用很多方法。例如创建另一个包含变量UserData data的对象并反序列化到该对象。但是,如果您想访问FirstName,您将始终必须添加datadata.FirstName),这不是很好。

另一种方法(如上面链接的帖子)是将对象反序列化为dynamic / var,获取数据的一部分,将其序列化并将该字符串提供给

dynamic obj = JsonConvert.DeserializeObject(JSONString);
UserData User = JsonConvert.DeserializeObject<Model.UserData>(JsonConvert.SerializeObject(obj["data"]));

是的,它运作良好,但也许有点开销? 另一个选择是使用自定义JsonConverter,但这似乎是为这么简单的事情分配的代码。

我希望使用像

这样的东西
[JsonProperty("data.firstname")]
public string FirstName;

或其他设置,让json.net知道它应该使用路径data将JSON字符串反序列化为UserData,但我还没有在文档中找到这样的东西。

有什么建议吗?

0 个答案:

没有答案