업데이트는 변화
그리고 신속하게 fixed는 822c3f0
을 설정합니다. 10.0.2 이후의 다음 릴리스에 있어야합니다.
그것은 버전 8.0.1에서 JsonTextReader
의 변경과 같은
이 XmlNodeConverter
에서 버그를 발견했을 수 있습니다 원래 대답. 파일의 예상치 못한 끝에 도달 7.0.1에서는
, JsonReader.TokenType
는 Unexpected JsonToken when deserializing node: None
예외를 던져 DeserializeNode()
원인 Read()
에 다음 시도, 후 JsonToken.None
된다. 그러나 8.0.1 이상에서 TokenType
은 마지막으로 발생한 토큰의 유형, 즉 JsonToken.PropertyName
에서 멈추지 않는 것처럼 보이므로 무한 재귀가 발생합니다.
올바른 수정 reader.Read()
의 반환 확인, 라인 2171 주위에 XmlNodeConverter.DeserializeNode()
에, 다음과 같습니다
case JsonToken.PropertyName:
if (currentNode.NodeType == XmlNodeType.Document && document.DocumentElement != null)
{
throw JsonSerializationException.Create(reader, "JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifying a DeserializeRootElementName.");
}
string propertyName = reader.Value.ToString();
// Need to check the return from reader.Read() here:
if (!reader.Read())
{
throw JsonSerializationException.Create(reader, "Unexpected end of file when deserializing property: " + propertyName);
}
을 ... 그리고 몇 가지 더 많은 장소는 XmlNodeConverter.cs
에가 표시되는 위치 reader.Read()
요구의 반환 확인해야합니다 (예 : ReadAttributeElements(JsonReader reader, XmlNamespaceManager manager)
, line 1942).
원할 경우 report an issue 수 있습니다. 한편
는 해결 방법에 대한 옵션은 다음과 같습니다
부패 다른 방식으로 JSON에 대한 예를 그래서 같은 :
string json = @"{'Row' : }";
그리고 더 일반적인 예외를 확인 JsonException
.
사전 분석 JToken
에 JSON을 :
Assert.Throws<JsonException>(()=>JsonConvert.DeserializeXmlNode(JToken.Parse(json).ToString(), "ROOT"));
출처
2017-04-21 21:50:07
dbc