JSON을 로 변환하는 동안 오류가 발생했습니다.asp.net의 넷오브젝트
asp.net에서 JSON 문자열을 .net 객체로 변환할 수 없습니다.숨김 필드를 사용하여 클라이언트에서 서버로 JSON 문자열을 보냅니다(JSON 개체를 유지함).숨김 필드의 Tostring() 및 파일 뒤에 있는 코드의 숨김 필드 값을 읽습니다.
Json 문자열/개체:
[[{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"2","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"2","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"67","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"67","HostingTypeID":"3"}],
[{"OfferId":"1","OrderValue":"99","HostingTypeID":"6"}],
[{"OfferId":"1","OrderValue":"10","HostingTypeID":"8"}]]
.Net 객체
public class JsonFeaturedOffer
{
public string OfferId { get; set; }
public string OrderValue { get; set; }
public string HostingTypeID { get; set; }
}
파일 뒤의 코드 변환 코드
byte[] byteArray = Encoding.ASCII.GetBytes(HdnJsonData.Value);
MemoryStream stream = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonFeaturedOffer));
object result= serializer.ReadObject(stream);
JsonFeaturedOffer jsonObj = result as JsonFeaturedOffer;
변환 중에 다음 오류가 발생합니다.
네임스페이스 "에 요소 'root'이 필요합니다.이름이 ' , 네임스페이스 '인 '없음'이 발견되었습니다.
유감스럽게도 제안된 솔루션 중 문제의 진짜 원인을 해결하는 솔루션은 없습니다.이 예외는 디시리얼라이저가 스트림의 끝에서 읽기를 시도함을 의미합니다.
해결책은 스트림을 선두로 되돌리는 것입니다.즉, 역직렬화 전을 설정합니다.
또, 코멘트에 기재되어 있듯이, StreamWriter 를 사용하고 있는 경우는, 스트림을 사용하기 전에 플래시 할 필요가 있습니다.
이것을 수동으로 실행하는 대신 내장된 경량 자바스크립트 Serializer를 사용할 것을 권장합니다.serialize/deserialize할 클래스에는 속성이 필요하지 않습니다.
또한 모든 wcf에 신경 쓸 필요가 없기 때문에 DataContractJsonSerializer보다 유연하고 빠릅니다.또한 범용 오버로드가 있어 사용이 매우 간단하며 익명 유형도 처리할 수 있습니다.
시리얼화:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var objectAsJsonString = serializer.Serialize(objectToSerialize);
역직렬화:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
JsonFeaturedOffer deserializedObject = serializer.Deserialize<JsonFeaturedOffer>(s_JsonBaseDate);
더욱 쉽게 하기 위해 개체/스트링에서 직접 json 직렬화/직렬화를 제공하는 확장 메서드를 만들 수 있습니다.
클래스를 json/xml로 자동 직렬화하거나 오브젝트로 역직렬화하려면 직렬화 가능한 속성으로 클래스를 장식해야 합니다.
[Serializable, XmlRoot("JsonFeaturedOffer"), DataContract(Name="JsonFeaturedOffer")]
public class JsonFeaturedOffer
{
[XmlElement ("OfferId"), DataMember(Name="OfferId")]
public string OfferId {get; set;}
...등등
Json Featured Offers 어레이의 경우 다음과 같이 해야 합니다.
byte[] byteArray = Encoding.ASCII.GetBytes(HdnJsonData.Value);
MemoryStream stream = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonFeaturedOffer[][]));
object result= serializer.ReadObject(stream);
JsonFeaturedOffer[][] jsonObj = result as JsonFeaturedOffer[][];
언급URL : https://stackoverflow.com/questions/2668626/error-converting-json-to-net-object-in-asp-net
'programing' 카테고리의 다른 글
| WordPress를 사용하여 제거할 때 테이블을 드롭하는 방법 (0) | 2023.04.04 |
|---|---|
| Bower 의존관계를 최소 버전으로 대체하도록 Grunt를 설정하는 방법 (0) | 2023.04.04 |
| Woocommerce: 오더 상태를 프로그래밍 방식으로 업데이트 (0) | 2023.04.04 |
| Wordpress: mysql DATE_FORMAT 사용 시 $wpdb 준비에 실패함 (0) | 2023.04.04 |
| Wordpress에서 예쁜 퍼멀링크 활성화 - Apache 구성이 작동하지 않음 (0) | 2023.04.04 |