用JSON.net压缩成一个对象

本文关键字:一个对象 压缩 net JSON | 更新日期: 2023-09-27 18:05:50

我正在使用一个API,其示例输出如下

{
        "id": 12345678
        "photo-url-1280": "http://68.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_1280.png",
        "photo-url-500": "http://67.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_500.png",
        "photo-url-400": "http://68.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_400.png",
        "photo-url-250": "http://67.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_250.png",
        "photo-url-100": "http://67.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_100.png",
        "photo-url-75": "http://67.media.tumblr.com/5076e813bdc463409f59172b2c152487/tumblr_ocy8peMYvo1uur5s9o1_75sq.png",
}

最后几项是非常相关的,所以我想把它们移动到它们自己的对象中。

到目前为止,获取指定的图像将非常混乱。得到400px的版本可能看起来像这样-

myPhotoObject.Photo400

但是,如果我能够将这些url移动到它们自己的对象中,我可以像下面这样更清晰地调用它:

myPhotoObject.Photo.400

甚至引入更友好的方法

myPhoto.Photo.GetClosestTo(451);

这里的url有一个模式-在_字符之后,显示识别大小,例如..._1280.png..._500.png

获得这些的最好方法是编写一个getter属性,只是将已知大小的列表附加到URL?这种方式会比纯粹使用JSON.net转换器更有效率吗?

用JSON.net压缩成一个对象

我建议首先将JSON解析为字典,如下所述,然后手动将其复制到更结构化的对象:

Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var myImageObject = new { Id = "", Images = new Dictionary<int, string>()};
foreach(var key in dict.Keys) {
    if(key == "id") {
         myImageObject.Id = dict[key]
    }
    else {
         var imageSize = ParseForImageSize(key);
         myImageObject.Images.Add(imageSize, dict[key])
    }
}