2012-01-27 4 views
1

내 웹 서비스 메서드 중 하나에서 C#에서 JavaScriptSerializer.serilize를 호출하는 객체를 serialize했습니다. 이제 자바 스크립트 문자열을 반환 할 때 개체에서 속성을 호출 할 수 싶습니다. 나는 시도했다, results.d.ID 그러나 그것은 작동하지 않았다. 여기에 그것이 무엇을 반환합니다. 어떤 도움을 주셔서 감사합니다.자바 스크립트에서 JavaScriptSerializer C#을 다시 읽는 중

JavaScriptSerializer oSerializer = new JavaScriptSerializer(); 
     Inventory item = Inventories.GetInventoryByID(inventoryID); 
     string jsonObject = oSerializer.Serialize(item); 

예를 들어 ID를 빼내고 싶습니다. 내가 어떻게 그럴 수 있니?

{"d":"{\"ID\":\"589652cf-2ccd-49c1-b457-f2793a2a2424\",\"Brand\":{\"ID\":\"b728281b-cf3c-4ee0-ba3d-a3573b886b14\",\"Name\":\"Puma1\",\"ParentBrand\":null,\"BrandChildren\":{\"IsValueCreated\":false,\"Value\":[]}},\"DateAdded\":\"\\/Date(1327695794000)\\/\",\"AddedBy\":{\"ID\":\"d6e1f2e7-f8d1-4809-aadd-4cacd5c2bc43\",\"Email\":\"[email protected]\",\"FirstName\":\"maurice\",\"MiddleInitial\":\"l\",\"LastName\":\"bachelor\",\"Address\":\"111 main st\",\"Phone\":\"2162330333\",\"IsAdmin\":true,\"DateJoined\":\"\\/Date(-62135578800000)\\/\",\"HasPurchased\":false,\"AgreeTerms\":true,\"LastPurchaseDate\":null,\"Password\":\"maurice\",\"CompanyName\":\"sneakers101\",\"AllowEmail\":false,\"PurchaseOrders\":{\"IsValueCreated\":false,\"Value\":[]}},\"LastUpdated\":\"\\/Date(1327688594000)\\/\",\"Instock\":true,\"NumberInStock\":12,\"MainPictureUrl\":\"\",\"AlternativePictureUrl\":\"\",\"ThumbNailUrl\":\"\",\"Price\":12.99,\"Like\":0,\"Discount\":1,\"ItemReleaseDate\":\"\\/Date(568011600000)\\/\",\"ItemCondition\":\"Great\",\"Size\":12,\"ItemNumber\":3,\"IsFavorite\":false,\"Details\":\"test Details\",\"Name\":\"Test\"}"} 
+3

다른 JSON 객체의 속성 인 문자열에 JSON 객체를 래핑합니다. 이것은 드문 경우입니다. JavaScriptSerializer를 사용하는 것이 잘못되었다고 생각합니다. – millimoose

답변

3

Inerdial은 이상한 내포 된 JSON 값을 가지고 있다고 말했습니다. 데이터가 실제로 원하는 형식이면 JSON.parse를 사용하여

JSON.parse(results.d).ID과 같은 값을 다시 구문 분석합니다.

+0

이 방법이 효과적 일 수 있지만 근본적인 문제를 해결하는 것이 가장 좋습니다. http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/. 그렇지 않으면, 그는 불필요하게 모든 요청에 ​​대해 데이터를 두 번 직렬화 및 비 직렬화 할 것입니다. –

1

는 여기 모든에 대해 무엇이다 : 당신의 근본적인 문제가 manually JSON serialization 인 것 같습니다 asp.net's ajax d

+0

정말입니까? 'd'의 값은 json 객체가 아닌 문자열입니다. –

+0

@ L.B : 그렇습니다, 그것은 문자열이고 var MyObject = JSON.parse (d)로 구문 분석합니다; – frenchie

1
var jsonObj = theObject; // Assuming it is parsed somehow 

var embeddedJsonObj = $.parseJSON(jsonObj.d); 

// embeddedJsonObj.ID is the ID you need. 

Demo

0

.

ASP.NET이 자동으로 JSON 메서드의 결과를 serialize하므로 수동으로 serialize 된 jsonObject 문자열이 두 번째로 serialize 된 것입니다. 그래서 알렉세이의 대답이 나온 것입니다. jQuery는 한 번 역 직렬화하여 .d 속성에 JSON 문자열이 포함 된 다음 JSON.parse()이 내부 JSON 문자열을 deserialize합니다.

그러나 데이터가 두 번 직렬화되고 두 번 직렬화되기 때문에 이는 비효율적입니다. 대신, 그냥 이렇게 :

[WebMethod] 
public Inventory GetInventoryById(inventoryID) { 
    return item = Inventories.GetInventoryByID(inventoryID); 
} 

을 그리고, ASP.NET은 다음과 같습니다 JSON을 반환합니다 jQuery를 ASP.NET 이후 자동으로 JSON.parse() 것 (당신이 jQuery를 사용하는 가정)

{"d": {"ID": "589652cf-2ccd-49c1-b457-f2793a2a2424", /* the rest of your data here */ }} 

application/json Content-Type으로 응답하면 results.d.ID에 색인을 생성 할 수 있습니다.

관련 문제