使用 Lastfm API 的 JSON 命名问题

Posted

技术标签:

【中文标题】使用 Lastfm API 的 JSON 命名问题【英文标题】:JSON Naming issue using Lastfm API 【发布时间】:2014-03-26 20:05:31 【问题描述】:

我对 API 和 JSON 还很陌生,所以请多多包涵……

我想从 last fm 的 API 中使用有关专辑的信息,我可以使用除了图像之外的所有内容,因为似乎存在命名问题。

api部分:

   "image": [
        "#text": "http:\/\/userserve-ak.last.fm\/serve\/34s\/88057565.png",
        "size": "small"
    ,
    
        "#text": "http:\/\/userserve-ak.last.fm\/serve\/64s\/88057565.png",
        "size": "medium"
    ,
    
        "#text": "http:\/\/userserve-ak.last.fm\/serve\/174s\/88057565.png",
        "size": "large"
    ,
    
        "#text": "http:\/\/userserve-ak.last.fm\/serve\/300x300\/88057565.png",
        "size": "extralarge"
    ,
    
        "#text": "http:\/\/userserve-ak.last.fm\/serve\/_\/88057565\/Believe.png",
        "size": "mega"
    ],

通过 JSON2CSharp 运行 JSON 后,我得到:

public class Image

public string __invalid_name__#text  get; set; 
public string size  get; set; 

显然这不好,所以有人能指出我解决问题的正确方向吗? 可以重命名吗?

任何帮助将不胜感激,谢谢:)

【问题讨论】:

【参考方案1】:

我使用 Json.NET 来解析他们的 API 响应,并使用 JsonProperty 属性将#text 映射到有效的属性名称,如下所示:

public class ArtistImage

    [JsonProperty("size")]
    public string Size  get; set; 

    [JsonProperty("#text")]
    public string Uri  get; set; 

如果需要,我的代码在 CodePlex 上:https://concertfinder.codeplex.com/ 但基本上,一旦你定义了你的类,你只需使用 JsonSerializer 来反序列化(jsonData)。

【讨论】:

您好,感谢您的回复,它说找不到我的“JsonProperty”?有什么想法吗? JSon.net...抱歉错过了参考 是的,只要确保你包含那个 nuget 包 - 如果你在让它工作时遇到任何其他问题,请告诉我。我使用 Json.NET 是因为我认为它使 ser/deser 过程更容易微调。

以上是关于使用 Lastfm API 的 JSON 命名问题的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 命名属性反序列化为 .Net 对象

Rest Template 无法正确解析 json rest api 响应

Autodesk Forge Data Manager Api 重命名项目

使用 Jackson 根据 API 版本指定不同的 JSON 属性名称

如何在 Swift 中解码一个命名的 json 对象数组

大多数 last.fm 艺术家图像丢失(回声 api)