日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

解析json数据_Retrofit同时解析JSON和XML数据格式

發(fā)布時(shí)間:2025/3/11 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析json数据_Retrofit同时解析JSON和XML数据格式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

Android開(kāi)發(fā)中,我們會(huì)經(jīng)常遇到前端需要解析兩種數(shù)據(jù)格式(json和xml),比如自己服務(wù)器返回的是json格式的數(shù)據(jù),我們做微信登錄的時(shí)候,微信返回的格式又是xml格式的。我們可以通過(guò)自己編寫Retrofit的ConverterFactory來(lái)做到可以同時(shí)解析兩種數(shù)據(jù)格式。

代碼

1.一般我們實(shí)例化retrofit實(shí)例的時(shí)候,都會(huì)傳入GsonConverterFactory,如果我們需要同時(shí)解析兩種格式,我們需要重寫Converter.Factory()類

2.引入依賴包:

com.squareup.retrofit2:converter-simplexml是retrofit幫我們解析xml的依賴

implementation 'com.squareup.retrofit2:retrofit:2.6.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.squareup.retrofit2:converter-simplexml:2.4.0'? ?

3.重寫Converter.Factory()類,在responseBodyConverter方法中,判斷到底是那種數(shù)據(jù)格式然后對(duì)應(yīng)解析。

class JsonOrXmlConverterFactory : Converter.Factory() { private val xmlFactory:Converter.Factory by lazy { SimpleXmlConverterFactory.create() } private val jsonFactory: Converter.Factory by lazy { GsonConverterFactory.create() } companion object { fun create():JsonOrXmlConverterFactory { return JsonOrXmlConverterFactory() } } override fun requestBodyConverter( type: Type, parameterAnnotations: Array, methodAnnotations: Array, retrofit: Retrofit ): Converter? { return super.requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit) } override fun responseBodyConverter( type: Type, annotations: Array, retrofit: Retrofit ): Converter? { for(annotation in annotations) { if(annotation !is ResponseFormat) { continue } val value = annotation.value if (ResponseFormat.JSON == value) { return jsonFactory.responseBodyConverter(type, annotations, retrofit) } else if (ResponseFormat.XML == value) { return xmlFactory.responseBodyConverter(type, annotations, retrofit) } } return null }}? ? ? ?

4.添加ResponseFormat注解,需要在HttpService中告訴請(qǐng)求到底返回的是xml還是json:

@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)@Retention(AnnotationRetention.RUNTIME)annotation class ResponseFormat(val value: String = "json") { companion object { const val JSON = "json" const val XML = "xml" }}

5.Httpservice注解添加:

(1)當(dāng)服務(wù)端返回格式為json時(shí),ResponseFormat不需要添加參數(shù),默認(rèn)為json:

@ResponseFormat @FormUrlEncoded @POST("v1/user/getUser2") suspend fun getUser(@Field("openid") openid: String) : ReponseServer? ? ?

(2)當(dāng)服務(wù)器返回xml時(shí),@ResponseFormat(value = ResponseFormat.XML)添加參數(shù)。告訴JsonOrXmlConverterFactory此時(shí)需要解析xml。

@ResponseFormat(value = ResponseFormat.XML) @POST("unifiedorder") suspend fun wxPrePay(@Body route:RequestBody) : WXPayReponse @ResponseFormat(value = ResponseFormat.XML) @POST("orderquery") suspend fun wxPayOrderQuery(@Body route: RequestBody) : WXOrderReponse? ??

總結(jié):

到此我們可以通過(guò)Retrofit解析json和xml格式,如果大家有疑問(wèn)或者不足之處,可以在下方評(píng)論留言。

總結(jié)

以上是生活随笔為你收集整理的解析json数据_Retrofit同时解析JSON和XML数据格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。