繁体   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