2017-10-17 144 views
1

我已經將我的Web服務遷移到.NET Core 2.0,它工作正常,但我有作爲JSON字符串獲取響應的問題。在API遷移到.NET核心2.0的Web服務和返回json

方法:

[HttpGet] 
    [ProducesResponseType(typeof(string), 200)] 
    [ProducesResponseType(typeof(EntityNotFoundErrorResult), 404)] 
    public async Task<IActionResult> GetCurrenciesAsync() 
    { 
     var result = await service.GetByTypeAsync(ObjectType.Currency.ToString()); 

     return Ok(result); 
    } 

即返回正確的JSON作爲result

"{\"elements\": [{\"Id\": \"1\", \"Symbol\": \"PLN\"},{\"Id\": \"2\", \"Symbol\": \"SIT\"}]}" 

然後在客戶端我使用service stack讓我的貨幣爲字符串:

public virtual IEnumerable<CurrencyData> GetCurrencies() 
    { 
     string response = null; 

     try 
     { 
      response = api.Get<string>("/Currencies"); 
     } 
     catch (Exception e) 
     { 
     } 

     return string.IsNullOrEmpty(response) ? null : JsonConvert.DeserializeObject<TempCurrencyClass>(response).elements; 
    } 

response看起來像這樣:

"\"{\\\"elements\\\": [{\\\"Id\\\": \\\"1\\\", \\\"Symbol\\\": \\\"PLN\\\"},{\\\"Id\\\": \\\"2\\\", \\\"Symbol\\\": \\\"SIT\\\"}]}\"" 

所以JsonConvert.DeserializeObject引發反序列化異常:

Newtonsoft.Json.JsonSerializationException 

但是當我反序列化響應刺痛和objest然後它的工作原理:

var x = JsonConvert.DeserializeObject<string>(response); 
var deserialized = JsonConvert.DeserializeObject<TempCurrencyClass>(x).elements; 

我猜測,這個問題在客戶端上嗎?奇怪的是,它在.NET核心1.1上工作得很好。

我失蹤了什麼?

回答

3

那麼看來在.NET核2.0 [Produces("application/json")]已經改變,則串行化串輸出到JSON所以我不得不它序列兩次......此OS溶液[Produces("text/plain")]取代[Produces("application/json")]額在該方法/控制器