2016-09-01 2 views
1

아래 JSON 데이터입니다. JavaScriptSerializer.Deserialize을 사용하여 deserialize하려고 시도하지만 예외가 발생합니다.JSON 데이터를 JavaScriptSerializer.Deserialize를 사용하여 큰 따옴표로 비 직렬화하십시오.

코드 :

var jsonSerialiser = new JavaScriptSerializer(); 
FCMCasepackVM casepack = jsonSerialiser.Deserialize<FCMCasepackVM>(selectedCasePack); 

JSON 데이터 :

{ P_ID:"1478952", P_NM:"BAHLSEN COOKIES WAFER ROLL MILK CHOCOLATE 3.5 
OZ", BYR_ID:191, BYR_NM:"BYR_NM", VDR_ID:48532, VDR_NM:"KEHE FOOD DIST 
INC", CPK_ID:"1478952-12", CPK_DSC:"BAHLSEN COOKIES WAFER ROLL MILK 
CHOCOLAT", VDR_IT_CD_ID:"6398", UPC_ID:7056921950.0, 
CPK_PRI_FLG:"True", CPK_SRC:"PEF", **FCM_RGLT_TYP_CT:"FSV"P"**, 
CPK_P_ORIG_DSC:"", RGLN_EXCL_FLG:"False", BRND_TYP:"" } 

예외

추가 정보 : 유형의 개체를 변환 할 수 없습니다 '시스템 '입력 을'.String Meijer.MerchProduct.FCM.Models.ViewModels.FCMCasepackVM '

심지어 내가 직렬화 그러나 다른 예외를

코드 얻기 전에 데이터 직렬화 시도 :

var jsonSerialiser = new JavaScriptSerializer(); 
selectedCasePack = jsonSerialiser.Serialize(selectedCasePack); 
FCMCasepackVM casepack = jsonSerialiser.Deserialize<FCMCasepackVM>(selectedCasePack); 

JSON 데이터 후 직렬화

"{ P_ID:\"1478952\", P_NM:\"BAHLSEN COOKIES WAFER ROLL MILK CHOCOLATE 
3.5 OZ\", BYR_ID:191, BYR_NM:\"BYR_NM\", VDR_ID:48532, VDR_NM:\"KEHE FOOD DIST INC\", CPK_ID:\"1478952-12\", CPK_DSC:\"BAHLSEN COOKIES 
WAFER ROLL MILK CHOCOLAT\", VDR_IT_CD_ID:\"6398\", 
UPC_ID:7056921950.0, CPK_PRI_FLG:\"True\", CPK_SRC:\"PEF\", 
FCM_RGLT_TYP_CT:\"FSV\"P\", CPK_P_ORIG_DSC:\"\", RGLN_EXCL_FLG:\"False\", BRND_TYP:\"\" }" 

예외

추가 정보 : 전달 된 잘못된 개체가, ''또는 '}'예상. (319) : {P_ID : "1478952", P_NM : "BALLLSEN COOKIES WAFER ROLL MILK CHOCOLATE 3.5 OZ", BYR_ID : 191, BYR_NM : "BYR_NM", VDR_ID : 48532, VDR_NM : "KEHE FOOD DIST INC" "PEF" FCM_RGLT_TYP_CT : "FSV"P CPK_ID "1478952-12", CPK_DSC "BAHLSEN 쿠키 WAFER ROLL 우유 CHOCOLAT", VDR_IT_CD_ID : "6398", UPC_ID : 7056921950.0, CPK_PRI_FLG : CPK_SRC "참" "CPK_P_ORIG_DSC" "RGLN_EXCL_FLG :"거짓 ", BRND_TYP?" "}

사람이 나를 도와주세요 수 있습니다 사전에

감사합니다, KARTHIK

+0

과 같은 온라인 JSON 검사기를 사용하면 잘못된 JSON 문자열이있는 것처럼 보입니다. 두 번째 예외는 알려줍니다. FCM_RGLT_TYP_CT 키는 큰 따옴표가 3 개 있기 때문에 문제가되는데 그 중 하나는 이스케이프 또는 제거해야합니다. – Louis

답변

0

이 json 데이터가 직렬화되는 위치는 어디입니까? 직렬화 중에 따옴표가 이스케이프되어야합니다.

이 JSON 데이터가 유효하지 않습니다.이 json 데이터를 직렬화하는 앱에 액세스 할 수있는 경우 문자열의 따옴표를 이스케이프 처리해야합니다.

안녕 KARTHIK이 newtonsoft의 라이브러리를 사용하여 JSON 형식의 개체를에는 직렬화하기 위해 다음과 같은 코드를 볼 수

업데이트 (일반적으로 모든 라이브러리는 직렬화시에 자동으로 않습니다).

공용 부분 Form1 클래스 : 폼 { 공개를 Form1() { 의 InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) 
    { 
     var d = new DoTheWork(); 
     d.SerializeSample(); 
    } 
} 


public class Sample 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
} 


public class DoTheWork 
{ 

    public string SerializeSample() 
    { 
     List<Sample> sampleList = new List<Sample>(); 
     sampleList.Add(new Sample { Id = "1", Description = "Karthik" }); 
     sampleList.Add(new Sample { Id = "1", Description = "Sujit" }); 
     sampleList.Add(new Sample { Id = "1", Description = "John\"s" }); 

     StringBuilder sb = new StringBuilder(); 
     using (StringWriter sw = new StringWriter(sb)) 
     { 
      JsonSerializer serializer = new JsonSerializer(); 
      serializer.Serialize(sw, sampleList); 

     } 
     System.Diagnostics.Debug.Write(sb.ToString()); 
     return sb.ToString(); 
    } 
} 
+0

위의 JSON 데이터는 VIEW 측에서 수동으로 형성된 직렬화 방법을 사용하여 직렬화되지 않습니다. JSON 데이터를 따옴표로 묶는 방법을 알려주십시오. 예 : DESC : 8 "원형 테이블 –

+0

안녕하세요 Karthikeyan, –

0

사용하고있는 JSON이 유효하고 FCMCasepackVM의 컨테이너 객체를 모른 채하고 당신이 JSON을 가지고 어떻게 어디서 무엇이 잘못되었는지 알 어렵다. 다음은 JavaScriptSerializer에 기본 제공되는 System.Web.Script.Serialization 기술을 사용하는 간단한 예제입니다.

[{"Id":1,"Desc":"John"},{"Id":2,"Desc":"Jane"},{"Id":3,"Desc":"Joey"}] 

를 또는 하나의 항목이 될 수있다 : I 텍스트에서 JSON으로 직렬화 할 때

public class POC 
{ 
    public int Id { get; set; } 
    public string Desc { get; set; } 
} 

static List<POC> GetPOCOs() 
{ 
    return new List<POC> 
    { 
     new POC { Id = 1, Desc = "John"}, 
     new POC { Id = 2, Desc = "Jane" }, 
     new POC { Id = 3, Desc = "Joey" } 
    }; 
} 

static void Main(string[] args) 
{ 
    var pocos = GetPOCOs(); 

    var serializer = new JavaScriptSerializer(); 
    var sjson = serializer.Serialize(pocos); 
    var djson = serializer.Deserialize<List<POC>>(sjson); 

    Console.ReadLine(); 
} 

는 다음과 같아야합니다

{"Id":1,"Desc":"John"} 

NOT :

{Id:1,Desc:"John"} 

일반적으로 키 쌍 시스템은 모두 JSON입니다. 그것이 무엇인지 알 수 있으려면 따옴표로 묶인 키가 필요합니다. 의심스러운 경우 http://jsonlint.com/

+0

죄송합니다! 내 수업에 대한 자세한 내용을 제공하지 못했습니다. 제 질문은 객체를 JSON에 직렬화하는 대신 JSON 문자열을 인용 부호로 묶는 방법입니다. 내 예제에 대한 귀하의 JSON 데이터를 가져 가고있어 이 데이터는 소스 객체 [{ "Id": 1, "Desc": "John"}, { "Id": 2, "Desc" : "Jane"}, { "Id": 3, "Desc": "Joey"}] [{ "Id": 1, "Desc": "Joh"n "}, {" –

+1

JSON, XML 또는 확실히 바이너리를 수동으로 직렬화하면 안됩니다. .NET에 내장 된 것을 사용하십시오. 수동으로 일을 처리하는 길에 들어가면 많은 잘못된 요소와 구문이 생길 수 있습니다. 문자열에 큰 따옴표를 넣고 싶다면 \ "esacpe를 써서 직렬화하십시오. – djangojazz