0
我在這裏已經看到了一些問題here和here但仍無法進行以下工作。解析多個可能的Json響應
對於任一這些響應其在ex.Message的:
響應1
[
{
"validationErrorType": "WrongType",
"message": "Validation error of type WrongType",
"errorType": "ValidationError"
}
]
響應2
[
{
"message": "Validation error of type WrongType:",
"errorType": "ValidationError"
}
]
我試圖動態解析此作爲如下:
JArray parsedJObject = JArray.Parse(ex.Message);
JSchema oldSchema = JSchema.Parse(@"
{
'type': 'array',
'properties': {
'message': {'type': 'string'},
'errorType': {'type': 'string'}
},
'additionalProperties': false
}");
JSchema graphQlSchema = JSchema.Parse(@"
{
'type': 'array',
'properties': {
'validationErrorType': {'type': 'string'},
'message': {'type': 'string'},
'errorType': {'type': 'string'}
},
'additionalProperties': false
}");
if (parsedJObject.IsValid(oldSchema)) // IsValid - 1
{
// Do stuff
}
else if (parsedJObject.IsValid(graphQlSchema)) // IsValid - 2
{
// Do stuff
}
但是,兩個IsValid()調用都會爲任一響應返回true。我在這裏做錯了什麼?
對於反應1,我期待IsValid - 1
返回true
和IsValid - 2
返回false
,以及針對響應2,我期待IsValid - 1
返回false
和IsValid - 2
返回true
更新
按照David Kujawski和dbc給出的建議l通過JArray,並添加我已取得進展的required
屬性。
我的更新代碼在下面,但仍在努力驗證具有嵌套locations
對象的架構。
響應
[
{
"validationErrorType": "WrongType",
"locations": [
{
"line": 4,
"column": 1
}
],
"message": "Validation error of type WrongType",
"errorType": "ValidationError"
}
]
架構定義:
JSchema graphQlSchema = JSchema.Parse(@"
{
'type': 'object',
'properties':
{
'validationErrorType': {'type': 'string'},
'locations':
{
'type': 'object',
'properties':
{
'line': {'type': 'string'},
'column': {'type': 'string'}
}
},
'message': {'type': 'string'},
'errorType': {'type': 'string'}
},
'additionalProperties': false,
'required': ['message', 'errorType', 'validationErrorType', 'locations']
}");
解析響應
JArray parsedJObject = JArray.Parse(ex.Message);
foreach (JToken child in parsedJObject.Children())
{
if (child.IsValid(graphQlSchema)) // Not resolving to true
{
var graphQlSchemaDef = new[]
{
new
{
validationErrorType = string.Empty,
locations = new
{
line = string.Empty,
column = string.Empty
},
message = string.Empty,
errorType = string.Empty
}
};
var exceptionMessages = JsonConvert.DeserializeAnonymousType(ex.Message, graphQlSchemaDef);
foreach (var message in exceptionMessages)
{
// Do stuff
}
}
}
它們是相似的。只有* validationErrorType *可以是空的 –
我不明白你的意思。你能澄清嗎? –
屬性* validationErrorType *是一個字符串,字符串是一個引用類型,可以是* null * –