2014-08-27 1 views
1

저는 Azure의 최근 발표 된 검색 서비스를 시도해 왔으며 JSON.Net을 사용하여 결과 JSON 출력을 XML로 변환하고 있습니다. 강조 매개 변수를 추가 할 때를 제외하고는 정상적으로 작동합니다. Cannot get an XML string value from token type 'StartObject'. Path 'value[0][email protected]' 오류 메시지가 표시됩니다. 강조 매개 변수는 파서가 좋아하지 않는 @search.highlights을 추가합니다. 또한 jsonvalidatortool.com에서 JSON 출력을 확인한 결과 유효한 것으로 나타났습니다. json으로는 푸른 검색 서비스에서받은토큰 유형 'StartObject'에서 XML 문자열 값을 가져올 수 없습니다.

은 다음과 같습니다 : 다른

{ 
    "value": 
    [ 
     { 
     "@search.score": 1.2591839, 
     "@search.highlights": 
      { 
      "[email protected]": "#Collection(String)", 
      "kbTitle": [ 
       "No Video/Blank Screen When Attempting to Stream from <em>Netflix</em>" 
      ] 
      }, 
     "kbID":"10", 
     "kbTitle":"No Video/Blank Screen When Attempting to Stream from Netflix" 
     } 
    ] 
} 

누구나 JSON.Net와 함께 새로운 푸른 검색 서비스를 시도하고이 문제가 발생?

답변

1

불행하게도,이 JSON은 유효하지만, 두 가지 이유 Json.Net에 의해 XML로 직접 변환 할 수 없습니다 :

    JSON.Net는 @로 시작하는 JSON 속성 이름을 볼 때
  1. , 그것은 변환을 시도

    그것을 XML의 속성에 추가합니다. XML 속성은 간단한 값 (문자열, 정수 등)이어야합니다. 그것은 복잡한 객체 일 수 없다. JSON에서 @search.highlights 속성의 값은 분명히 복잡한 객체이므로 XML 속성으로 변환 할 수 없습니다. 그것이 오류를받는 이유입니다.

  2. XML 태그 이름에는 @을 사용할 수 없습니다. 첫 번째 문제 (예 : 을 @search.highlights에서 빼는 등)를 처리했다면 [email protected] 속성을 XML 태그로 변환하려고 시도 할 때 다른 오류가 발생하고 중간에 @이 포함되어 있기 때문에 오류가 발생합니다.

가능한 솔루션의 몇 가지 마음에 와서 :

더러운 빠른 및-접근 방식은 문자열 전에 XML로 변환에 JSON에 대체 수행하려고하는 것입니다. 문제 영역이 강조 표시된 두 개의 특정 속성 이름 인 경우 @ 문자를 밑줄 _과 같이 XML에 더 맛있는 것으로 제거하거나 바꿀 수 있도록 특별히 타겟팅 할 수 있습니다. JSON이 더 동적이어서 문제 속성 이름이 매우 다양 할 경우이 방법은 올바르게 작동하지 않을 수 있습니다. 당신은 내가하는 것보다 당신의 데이터를 잘 알고 있습니다. 나는 Azure Search Service에 익숙하지 않습니다.

더 강력한 솔루션은 JObject으로 JSON을 deserialize 한 다음 JObject을 수동으로 트래버스하고 필요한 방식으로 XML로 변환합니다. 필요하지 않은 부분은 생략하고 속성/태그 이름 등을 변경할 수 있습니다. 물론 Json.Net의 LINQ-to-JSON API (JObject, JTokens, JArrays 등)에 익숙하고 다음 클래스의 작업에 익숙하다고 가정합니다. .NET Framework의 System.Xml namespace

중간 모델 클래스를 만들고 JSON을 역 직렬화하여 (펑키 속성 이름을 처리하기 위해 [JsonProperty] 속성을 사용할 수 있습니다) XmlSerializer를 사용하여 해당 모델을 XML로 변환 할 수 있습니다.

희망이 도움이됩니다.

+0

당신은 최고입니다! 철저한 설명과 제안 된 솔루션 덕분에 이제는 문제를 잘 이해하고 처리하는 방법을 알게되었습니다. – Kevin

+0

문제 없습니다. 다행스럽게 도울 수있어! –

관련 문제