簡體   English   中英

從ASP.Net MVC控制器中的第三方API返回JSON字符串

[英]Returning JSON string from 3rd party API in ASP.Net MVC controller

我在控制器中包裝了第三方API(由於必須跳過安全環),該API返回JSON字符串。

我對JSON字符串做了一些小的更改,並希望返回該字符串。

我沒有用JSONResult做到這一點的方法,因為它需要一個對象,並且返回的JSON字符串將作為字符串發送回去。

我是否堅持使用諸如ContentResult之類的東西?

JSONLint.com說修改后的JSON有效。 它從...開始

[{"Acknowledgment Start Date":null,"Additional Location Details":null,"Area Code":null,"Assign To Vendor":"No",...

如果我使用Newtonsoft.Json.JsonConvert(),它將對我的JSON字符串執行此操作...

[[[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],...

如果我使用JavaScriptSerializer,我會再次得到這個...

[[[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],...

我懷疑問題的一部分是JSON字符串中的空值。

還有其他解決方案嗎? 使用我不知道的ContentResult是否有問題?

Newtonsoft.Json.JsonConvert() 序列化一個對象,但不解析 (也稱為反序列化)該對象。 當您調用Newtonsoft.Json.JsonConvert(jsonString) ,您正在說的是“將此JSON字符串序列化為JSON”。 因此,您得到一個時髦的結果。

您可以解析 JSON,然后進行修改,然后再次進行序列化 例如:

var myObject = Newtonsoft.Json.DeserializeObject<POCOClass>(jsonString);
myObject.Whatever = "123";
//... etc.

當然,在定義了POCO類之后,這是這樣的:

public class POCOClass {
    [JsonProperty(PropertyName = "Acknowledgment Start Date")]
    public string AcknowledgmentStartDate { get; set; }
    // etc.
}

然后,完成后,將其序列化回:

jsonString = Newtonsoft.Json.JsonConvert(myObject) // or Newtonsoft.Json.SerializeObject(myObject)

經過仔細檢查,我有了一些認識。

第一個是輸出的JSON無效,因為引用的標識符包含空格和冒號。 例如,這個從上面。

... ,"Additional Location Details":null, ...

雖然我懷疑這是問題的根源,但我沒有時間編寫解析器以使其適合JSON。

我會回來並寫一個工具來適當地清理混亂,但是現在我正在使用另一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM