问题描述
我正在尝试使用Marketo中的批量导入API端点来获取与Marketo中我warnings的批量作业相关的failures和created。
这些作业的输出表示为ObservableOfInputStreamContent
,但是这些端点的响应返回一个csv字符串(带有标头列),而不是JSON对象。为了解决这个问题,我们将生成的swagger文件与Marketo提供的swagger定义文件一起使用。这些生成的c#客户端文件具有ObservableOfInputStreamContent
对象,但这是一个空对象。我不确定这是故意的,还是Marketo方面的错误。生成的文件将尝试使用Newtonsoft.Json.JsonConvert.DeserializeObject<ObservableOfInputStreamContent>(responseText,JsonSerializerSettings);
反序列化对ObservableOfInputStreamContent
的API响应。
var responseText = await response.Content.ReadAsstringAsync().ConfigureAwait(false);
try
{
var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(responseText,JsonSerializerSettings);
return new ObjectResponseResult<T>(typedBody,responseText);
}
catch (Newtonsoft.Json.JsonException exception)
{
var message = "Could not deserialize the response body string as " + typeof(T).FullName + ".";
throw new ApiException(message,(int)response.StatusCode,responseText,headers,exception);
}
问题之一是API不会返回以(例如)开头的JSON:
address,city,country,123 lane,new york,USA
745 street,USA
Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:路径”,第0行,位置0。
第二个问题是ObservableOfInputStreamContent
在生成的文件中被定义为一个空对象。因此,如果API响应是有效的JSON,我认为它不会知道如何转换为空的ObservableOfInputStreamContent
对象。关于生成的代码的好消息是,它为我提供了扩展ObservableOfInputStreamContent
的选项,因为它被定义为partial
类。
[System.CodeDom.Compiler.GeneratedCode("njsonSchema","10.1.11.0 (Newtonsoft.Json v11.0.0.0)")]
public partial class ObservableOfInputStreamContent
{
}
也就是说,我可以使用JsonSerializerSettings
来解决此问题吗?我可以扩展ObservableOfInputStreamContent
类以容纳字符串属性,然后创建自己的JsonConverter并将API返回的字符串转换为新的ObservableOfInputStreamContent
吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)