正在以javascript读取JavaScriptSerializer c#
本文关键字:JavaScriptSerializer 读取 javascript | 更新日期: 2023-09-27 18:21:35
在我的一个Web服务方法中,我在c#中序列化了调用JavaScriptSerializer.serialize的对象。现在,当它向我的javascript返回一个字符串时,我希望能够从对象中调用属性。我试过了,结果是.d.ID,但没用。这是它的回报。谢谢你的帮助。
JavaScriptSerializer oSerializer = new JavaScriptSerializer();
Inventory item = Inventories.GetInventoryByID(inventoryID);
string jsonObject = oSerializer.Serialize(item);
例如,我想把身份证拿出来。我该怎么做?
{"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'":'"mojo@yahoo.com'",'"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'"}"}
正如Inedial所说,您有一个奇怪的嵌套JSON值。如果数据的格式是您真正想要的,请使用JSON.parse重新解析值,如:
CCD_ 1。
以下是它的全部内容:asp.net的ajax d
var jsonObj = theObject; // Assuming it is parsed somehow
var embeddedJsonObj = $.parseJSON( jsonObj.d );
// embeddedJsonObj.ID is the ID you need.
演示
看起来您的根本问题是手动JSON序列化。
由于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 */ }}
哪个jQuery(假设您使用的是jQuery)将自动JSON.parse()
,因为ASP.NET使用application/json
内容类型进行响应,然后您将能够索引到类似的results.d.ID
中。