2012-01-27 39 views
1

在我的web服务方法之一,我连载我的对象调用JavaScriptSerializer.serilize在C#。现在,当它返回一个字符串到我的JavaScript我想能够从该对象调用属性。我试过了,results.d.ID但没有奏效。这是它返回的内容。谢谢你的帮助。阅读JavaScriptSerializer C#背在JavaScript

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 2012-01-27 22:44:51

回答

3

正如Inerdial说你有奇怪的嵌套JSON值。如果数据是你真正想要的格式 - 使用JSON.parse重新解析样值:

JSON.parse(results.d).ID

+0

这将起作用,但最好解决下面的问题:http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/。否则,他会为每个请求两次不必要地序列化和反序列化数据。 – 2012-01-28 02:58:45

1

下面是它的全部:asp.net's ajax d

+0

你确定吗? 'd'的值是一个字符串而不是json对象。 – 2012-01-27 23:07:18

+0

@ L.B:是的,这是一个字符串,你用var MyObject = JSON.parse(d)解析它; – frenchie 2012-01-28 19:41:52

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

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

// embeddedJsonObj.ID is the ID you need. 

Demo

0

它看起来像你的根本问题是manually JSON serialization

因为ASP.NET会自动JSON序列化你的方法的结果,你的手动序列化jsonObject字符串然后让连载第二次。这就是为什么阿列克谢的答案有效。 jQuery的反序列化一次,让你用含有JSON字符串.d属性,然后JSON.parse()反序列化内心的JSON字符串。

但是,因为你的数据被序列化两次和反序列化两倍倍加效率低下。相反,只是这样做:

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

然后,ASP.NET将返回JSON看起来像这样:

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

因为ASP.NET哪些jQuery的(假设你使用jQuery)将自动JSON.parse()回应一个application/json内容类型,然后你将能够索引到像results.d.ID