{null} 값을 '시스템'으로 변환하는 동안 Newtonsoft Json 오류가 발생했습니다.Int32'
AJAX 요청 실행 시 다음 오류가 발생합니다.
{null} 값을 '시스템'으로 변환하는 동안 오류가 발생했습니다.Int32' 경로 '[5].탭'ID', 1번 라인, 331번 위치.
에러는, 다음의 행에서 발생합니다.processRequest (...)
public void ProcessRequest (HttpContext context) {
string strJson = new StreamReader(context.Request.InputStream).ReadToEnd();
List<ElementToUpdate> elements = JsonConvert.DeserializeObject<List<ElementToUpdate>>(strJson);
// (...)
}
디버거에 따르면 이 내용은strJson
:
[{
"bmk": "132M1",
"state": "off",
"type": "motor",
"tabID": 8
}, {
"bmk": "158M1",
"state": "off",
"type": "motor",
"tabID": 8
}, {
"bmk": "194M1",
"state": "off",
"type": "motor",
"tabID": 8
}, {
"bmk": "198M1",
"state": "on",
"type": "motor",
"tabID": 8
}, {
"bmk": "202M1",
"state": "off",
"type": "motor",
"tabID": 8
}, {
"bmk": "test-m",
"state": "on",
"type": "motor",
"tabID": null
}, {
"bmk": "158M1-2",
"state": "off",
"type": "motor",
"tabID": 2
}, {
"bmk": "100M1",
"state": "on_right",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "152M1",
"state": "on",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "192M1",
"state": "on_left",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "196M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "2000M1",
"state": "on_left",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "74M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "76M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "80M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "82M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "86M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "90M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "94M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "95M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "96M1",
"state": "off",
"type": "screwconveyor",
"tabID": 8
}, {
"bmk": "102Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "104Y1",
"state": "open",
"type": "ventile",
"tabID": 8
}, {
"bmk": "112Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "114Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "120Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "122Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "128Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "146Y1_2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "148Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "156Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "180Y1",
"state": "open",
"type": "ventile",
"tabID": 8
}, {
"bmk": "182Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "184Y1",
"state": "open",
"type": "ventile",
"tabID": 8
}, {
"bmk": "206Y1",
"state": "open",
"type": "ventile",
"tabID": 8
}, {
"bmk": "208Y1",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "72Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "78Y2",
"state": "open",
"type": "ventile",
"tabID": 8
}, {
"bmk": "84Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "88Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "92Y2",
"state": "closed",
"type": "ventile",
"tabID": 8
}, {
"bmk": "95_1Y1",
"state": "blocked",
"type": "ventile",
"tabID": 8
}, {
"bmk": "17H1",
"state": "on",
"type": "lamp",
"tabID": 8
}, {
"bmk": "l1",
"state": "on",
"type": "lamp",
"tabID": 8
}, {
"bmk": "17H1-2",
"state": "on",
"type": "lamp",
"tabID": 2
}, {
"bmk": "106M1",
"state": "on",
"type": "elevator",
"tabID": 8
}, {
"bmk": "154M1",
"state": "off",
"type": "elevator",
"tabID": 8
}, {
"bmk": "164M1",
"state": "off",
"type": "rotaryvalve",
"tabID": 8
}]
학급.ElementToUpdate
이
public class ElementToUpdate
{
public ElementType type;
public String bmk;
public string state;
public int tabID;
public ElementToUpdate()
{
}
public ElementToUpdate(ElementType type, String bmk, string state, int tabID)
{
this.type = type;
this.bmk = bmk;
this.state = state;
this.tabID = tabID;
}
}
제 질문은 다음과 같습니다.이 문제를 해결하는 방법에러 메시지를 올바르게 이해하면, 다음과 같이 표시됩니다.tabID
serialized 어레이의 5번째 json 객체의 경우null
하지만 보다시피 그렇지 않다.게다가.ElementToUpdate.tabID
안 그래?Int32
하지만int
.제가 뭔가를 빠뜨렸나요?
해결 방법
사실, 제 JSON 문자열에 포함된 요소는tabID
이었다null
처음에 확인했을 때 JSON 문자열의 포맷이 되어 있지 않았기 때문에, 다음으로 [5]는 어레이의 6번째 요소(실제로 알고 있다고 주장)를 의미하기 때문에, 이것을 간과하고 있었습니다.
계산하다ID는 무효입니다.
public int? tabID;
가치null
를 정수로 역직렬화할 수 없습니다.이것은 json의 6번째 부분(또는 0으로 시작하는 5번째 부분)입니다.
{\"bmk\":\"test-m\",\"state\":\"on\",\"type\":\"motor\",\"tabID\":null}
저기 탭이 보이시죠?ID가 null입니다.
사용 사례에 따라서는 JSON Serializer가 null을 무시하도록 하는 것도 고려할 수 있습니다.
예:
Movie movie = new Movie();
movie.Name = "Bad Boys III";
movie.Description = "It's no Bad Boys";
string included = JsonConvert.SerializeObject(movie,
Formatting.Indented,
new JsonSerializerSettings { });
// {
// "Name": "Bad Boys III",
// "Description": "It's no Bad Boys",
// "Classification": null,
// "Studio": null,
// "ReleaseDate": null,
// "ReleaseCountries": null
// }
string ignored = JsonConvert.SerializeObject(movie,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
// {
// "Name": "Bad Boys III",
// "Description": "It's no Bad Boys"
// }
제 경우 컨스트럭터 정의에 문제가 있었습니다.나는 가지고 있었다
public int? tabID { get; }
public Temp(int tabID)
{
this.tabID = tabID;
}
컨스트럭터 정의를 수정해야 했습니다.
public Temp(int? tabID)...
언급URL : https://stackoverflow.com/questions/41873274/newtonsoft-json-error-converting-value-null-to-type-system-int32
'programing' 카테고리의 다른 글
useDispatch() 오류: react-redux 컨텍스트 값을 찾을 수 없습니다.컴포넌트가 로 둘러싸여 있는지 확인하십시오. (0) | 2023.02.25 |
---|---|
Mongoose 스키마 변경 처리 (0) | 2023.02.25 |
JavaScript를 통해 MongoDB에 직접 액세스 (0) | 2023.02.25 |
JSON 직렬화 데이터를 NSDictionary로 변환하는 방법 (0) | 2023.02.25 |
Android의 JSON - 시리얼화 (0) | 2023.02.25 |