我正在调用一些REST服务并反序列化我进入C#对象的结果。这本书几乎看起来都很好,而且大多数情况下一切都很好,但是我有一段我的JSON会抛出反串行器并给出不太有用的错误信息:
反序列化对象时出现意外的标记:StartObject。路径' channels.results 1',第1行,第636位。
所以我去隔离了我的代码和JSON的一部分,看看我是否能弄清楚出了什么问题,而且目前我有这个:https://dotnetfiddle.net/RWpwtn它也失败了(虽然它被强制转换为动态它似乎工作,至少在大多数情况下):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stack.h"
#define TRUE 1
#define FALSE 0
int check_matching(void);
int main(int argc, char *argv[]) {
int n, i, c;
/* get the number of cases */
if (scanf("%d", &n) != 1) {
printf("invalid number\n");
exit(1);
}
/* consume the rest of the line */
while ((c = getchar()) != EOF && c != '\n')
continue;
for (i = 0; i < n; i++) {
if (check_matching()) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
int check_matching(void) {
int ret = TRUE, symbol, checkSymbol;
LinkedStack *pStack;
StackNode *pNode;
StackNode node;
pStack = createLinkedStack();
if (pStack == NULL) {
printf("createLinkedStack failed\n");
exit(1);
}
/* read a full line, one byte at a time */
while ((symbol = getchar()) != EOF && symbol != '\n') {
if (ret == FALSE)
continue;
switch (symbol) {
case '(':
case '[':
case '{':
node.data = symbol;
pushLS(pStack, node);
break;
case ')':
case ']':
case '}':
pNode = popLS(pStack);
if (pNode == NULL) {
ret = FALSE;
break;
} else {
checkSymbol = pNode->data;
if ((symbol == ')' && checkSymbol == '(')
|| (symbol == ']' && checkSymbol == '[')
|| (symbol == '}' && checkSymbol == '{')) {
// Right case. do nothing.
} else {
ret = FALSE;
}
free(pNode);
}
break;
}
}
if (isLinkedStackEmpty(pStack) == FALSE) {
ret = FALSE;
}
deleteLinkedStack(pStack);
return ret;
}
有人知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
我发现了这个错误,我想这篇帖子只是我需要的动力。
错误源于KVPEnumConverter看起来太远,而不是在值为null时返回。 我所要做的就是引入一个这样的空检查:
&& reader.TokenType != JsonToken.Null