인바운드 데이터를 잡는 웹 서비스가 있습니다.웹 서비스로 전송 된 JSON 배열의 괄호 처리 방법
ExceptionType : "System.InvalidOperationException"
Message: "Type 'System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' is not supported for deserialization of an array."
at System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer serializer, Boolean throwOnError, IList& convertedList)
.........
내가 몇 가지 테스트를했고,이 캐릭터 라인 JSON 배열의 브라켓과 관련이있다 : 수신 데이터가 캐릭터 라인 JSON 배열 인 경우, 단절은 500 수준 오류를 반환합니다. 문자열 화 된 JSON 객체 (중괄호 만)를 보내면 오류가 발생하지 않습니다. 나는. "{"id":111,"val":"x"}"
대 "[{"id":111,"val":"x"}]"
나를 혼란시키는 것은 웹 메서드에서 직렬화를 수행하지 않는다는 것입니다. 요청에 액세스하기 전에 모든 것이 업스트림으로 진행됩니다. 웹 방법은 다음과 같습니다 :
[WebMethod]
[ScriptMethod]
public void CatchData()
{
HttpRequest inboundRequest = HttpContext.Current.Request;
System.IO.Stream stream = inboundRequest.InputStream;
stream.Position = 0;
string contents = "";
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.UTF8))
{
contents = reader.ReadToEnd();
}
}
두 질문 :
나는 웹 메소드가 캐릭터 라인 JSON에 괄호를 처리 할 수 있도록 변경하려면 어떻게해야합니까?
정확히 여기서 무슨 일이 벌어지고 있습니까? HttpContext.Current.Request.InputStream이 웹 메서드의 상류에서 사용 중이라는 사실을 깨닫는 데는 시간이 걸렸으므로 내용을 다시 읽으려면 위치를 0으로 설정해야합니다. 콘텐츠 유형 application/json으로 설정되어 있습니까? 콘텐츠 형식을 application/text로 설정하면 스트림을 다시 설정할 필요가 없습니다.
예상되는 형식은 배열이지만 배열에 개체가 하나 뿐인 경우 단일 개체를 번갈아 가며 보입니다. –