Newtonsoft.Json lowercase keys


참조 URL
  1. http://stackoverflow.com/questions/6288660/net-ensuring-json-keys-are-lowercase
  2. http://nyqui.st/json-net-newtonsoft-json-lowercase-keys
  3. notation (헝가리언, 카멜, 파스칼 표기법)

 


JSON 타입으로 통신을 하면 Key와 Value로 변환을 해야 한다. 그렇지만 Newton에서는 기본적으로 클래스와 같은 형식으로 대소문자로 Key값을 변환하여 준다. C#에서 객체를 만들때 사용하는 네이밍 규칙과 JSON ( or Javascript) 에서 사용하는 네이밍 규칙이 서로 달라 혼선이 빚어 질 수 있다. 그래서 JSON타입으로 변환 할 때 소문자로 변환 할 수 있는 방안을 적용하면 일괄적으로 적용이 될 것이다. 적용 방법은 아래와 같다.



C# 네이밍 규칙


 C#에서는 파스칼식과 카멜식을 적절히 사용할 것을 권장하고 있다. 특별한 명명 규칙이 없다면 암묵적으로 프로퍼티는 파스칼식으로, 내부 필드 변수는 카멜식으로 명명한다.


- 파스칼 식 : PropertyName

- 카멜 식 : propertyName 


JSON or Javascript 네이밍 규칙


 Javascript는 기본적으로 카멜식으로 명명하여 사용하고 있다. 





[코드2] LowercaseContractResolver 클래스 코드


[코드3] 소문자로 변환



 위 방법은 '코드1', '코드2' 방법은 세팅 값을 바꿔서 치환하는 방법이고 이와는 다른 방향으로 치환해서 사용하는 방법도 있다. 



[코드3]  Static 클래스로 만듬



[코드4] 선언된 Static 클래스를 사용



 이런 방법으로 자바스크립트와 호환성을 같도록 하면서 일관적으로 사용할 수 있다.




[그림1] Newton JSON.NET의 성능 비교표



JSON Parsing


 웹 페이지에서 스트림을 통해 얻어온 값을 무턱대고 JSON 문자열을 평가하면 보안 문제가 있을 수 있기 때문에 바람직 하지 않다. 가능하면 JSON.parse()를 사용하는 것이 최선책이다. 이 메소드는 ES5(ECMAScript 5.0)부터 포함되었으나 일부 예전 버전의 브라우저에서는 지원하지 않기 때문에 JSON.org의 라이브러리(http://www.json.org/json2.js)를 이용해서 사용할 수 있다.


[코드1] JSON으로 파싱


 만약 jQuery를 사용하고 있다면 $.parseJSON(jsonString)으로 대신 할 수 있다. 그리고 JSON.parse()의 반대는 JSON.stringify()이다. 이 메소드는 객체 또는 배열을 인자로 받아 문자열로 serialization을 한다. 이 메소드를 통해서 쿠키에 값을 저장 또는 sessionStorage같은 곳에 저장할 수 있다.



[코드2] 확인 코드


+ Recent posts