我正在访问tomtom json api,当发生错误时,api会返回一个对象数组或单个对象。
示例:
[{"driverno": "...
错误示例:
{"errorCode": "8011","errorMsg": "request quota reached, error code: 8011"}
访问数据WebRequest,WebResponse并返回一个流,然后可以将其传递给DataContractJsonSerializer。但是,我无法创建一个序列化类,它接受两种形式的JSON,并且流不能被传递两次,因为不支持搜索功能。
有没有办法,创建一个支持两种类型的JSON输入的序列化类?
答案 0 :(得分:0)
我找到了一种解决方法,我将Stream
复制到MemoryStream
,从而可以进行搜索。我没有完全满意解决方案,因为它会进行Stream复制和DataContractJsonSerializer
两次。
样品:
string text = File.ReadAllText(PAHT);
text = Regex.Replace(text, "\\{[\\n\\r ]*\"__type", "{\"__type");
// copy to MemoryStream
using (MemoryStream dataStream = new MemoryStream(Encoding.UTF8.GetBytes(text)))
{
DataContractJsonSerializer errorDeserializer = new DataContractJsonSerializer(typeof(RequestError));
RequestError errorSerilaized = (RequestError)errorDeserializer.ReadObject(dataStream);
// check if an error happened
if (errorSerilaized.errorCode == null)
{
// seek the stream to position 0
dataStream.Position = 0;
DataContractJsonSerializer _deserializer = new DataContractJsonSerializer(typeof(NoneErrorSerializationClass));
NoneErrorSerializationClass tripReportsSerialized = (NoneErrorSerializationClass)_deserializer.ReadObject(dataStream);
// ...
}
else
{
MessageBox.Show(errorSerilaized.errorMsg);
}
}