gpt4 book ai didi

.net - 将 JSON 反序列化为对象 (VB.NET)

转载 作者:行者123 更新时间:2023-12-04 06:14:41 27 4
gpt4 key购买 nike

我在从这个 json 字符串中获取一些值时遇到了问题:

{
"kind": "shopping#products",
"etag": "\"YZWJaKE3MHROIW8rCIlu9mAACLM/6qxBB-GwuSPy5L3_zVS6sS2NYFI\"",
"id": "tag:google.com,2010:shopping/products",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=Bauerfeind+MalleoTrain+Ankle+Support,+Circumference+in+inches+6+3/4+-+7+1/2+,+Left,+Color+Titanium+&rankBy=price:descending&maxResults=1&startIndex=1",
"nextLink": "https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=Bauerfeind+MalleoTrain+Ankle+Support,+Circumference+in+inches+6+3/4+-+7+1/2+,+Left,+Color+Titanium+&rankBy=price:descending&maxResults=1&startIndex=2",
"totalItems": 46,
"startIndex": 1,
"itemsPerPage": 1,
"currentItemCount": 1,
"items": [
{
"kind": "shopping#product",
"id": "tag:google.com,2010:shopping/products/5944931/17136892246969389705",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/5944931/gid/17136892246969389705",
"product": {
"googleId": "17136892246969389705",
"author": {"name": "Superemployee.com","accountId": "5944931"},
"creationTime": "2011-08-28T07:46:29.000Z",
"modificationTime": "2011-09-11T06:02:54.000Z",
"country": "US",
"language": "en",
"title": "Bauerfeind MalleoTrain Ankle Support Circumference in inches 6 3/4 - 7 1/2 Left Color Black",
"description": "Bauerfeind MalleoTrain Ankle Support Circumference in inches 6 3/4 - 7 1/2 Left Color Black : Bauerfeind MalleoTrain Ankle Support, Circumference in inches 6 3/4 - 7 1/2 , Left, Color Black MalleoTrain relieves ankle pain and swelling during sports and everyday activities. Product Features: Knitted ankle support incorporating an anatomically contoured silicone insert behind each ankle bone . Silicone inserts leave ankle bones pressure-free and provide intermittent compression to the soft tissue of the joint, leading to increased circulation, thus aiding in the reduction of swelling and edema . Promotes proprioception , thus heightening sensory awareness in the ankle for increased joint stabilization . Anatomical knit carries controlled compression graduated at the edges to prevent constriction of circulation . Lightweight, breathable knit will not retain heat and is completely machine washable . Can be used to treat: Ankle swelling and soreness . Ankle sprains . Ligamental weakness and slight ligamentous tears . Degenerative joint disease (osteoarthritis) . Synovitis . ? Bursitis . Arthritis, osteoarthritis . Post cast . Product photo may not exactly match the product offered for sale. Please refer to the product description.",
"link": "http://superemployee-com.amazonwebstore.com/Bauerfeind-MalleoTrain-Ankle-Support-Circumference-in/M/B001D0PFRY.htm?traffic_src=froogle&utm_medium=CSE&utm_source=froogle",
"brand": "Bauerfeind",
"condition": "new",
"inventories": [{"channel": "online", "availability": "inStock","price": 90.0,"currency": "USD"} ],
"images": [{"link": "http://ecx.images-amazon.com/images/I/31xD5bPI4sL.jpg?gdapi"}
]
}
}
]

我曾尝试使用和创建类,但除了前两个级别之外无法返回数据,例如我试图检索价格但不知道如何提取这些数据?

这是我正在使用的代码,它不返回任何内容:
<DataContract(Namespace:="")> _
Public Class items

<DataMember(Name:="product")>
Public Property product As product

End Class

<DataContract(Name:="product", Namespace:="")> _
Public Class product
<DataMember(Name:="inventories")>
Public Property inventories As inventories

End Class

<DataContract(Name:="inventories", Namespace:="")> _
Public Class inventories
<DataMember(Name:="price")>
Public Property price As Double

End Class

谢谢你的帮助

使用 JSON.net 框架我将我的类更改为以下但仍然没有得到任何返回?
   Public Class items
Public Property product As product()
Public Property kind As String
End Class

Public Class product
Public Property inventories As inventories()
End Class

Public Class inventories
Public Property price As Double
End Class

最佳答案

我推荐 JSON.net,就像 SBlackler 所做的那样。我根据您的对象和您发布的 JSON 对象用 C# 编写了一个测试,并且能够很好地构建所有内容。这是我的代码。

        List<items> Results = new List<items>();
foreach (JToken Item in (JArray)JObject.Parse(json)["items"])
{
Results.Add(new items()
{
kind = Item["kind"].ToString(),
product = new product()
{
inventories = new inventories()
{
price = Convert.ToDouble(Item["product"]["inventories"][0]["price"].ToString())
}
}
});
}
Response.Write(Results[0].product.inventories.price);

我有点不确定 json 对象的结构,但库存似乎是一个数组。在您发布的示例中,您似乎试图获取该数组中第一个对象的“价格”值,而我的代码就是这样做的。如果库存数组中有多个对象,您可能需要相应地调整您的对象和填充它们的代码。

这是我的对象:
class items
{
public product product { get; set; }
public string kind { get; set; }
}

class product
{
public inventories inventories { get; set; }
}

class inventories
{
public double price { get; set; }
}

上面的代码假设库存数组中总是至少有一个对象,并且只会从第一个中提取。以下是如果库存数组中有多个对象,您可能希望如何重构代码。
    List<item> Results = new List<item>();
foreach (JToken Item in (JArray)JObject.Parse(json)["items"])
{
item CurrentItem = new item()
{
kind = Item["kind"].ToString(),
product = new product()
};
foreach (JToken inventory in (JArray)Item["product"]["inventories"])
{
CurrentItem.product.inventories.Add(new inventory()
{
price = Convert.ToDouble(inventory["price"].ToString())
});
}
Results.Add(CurrentItem);
}
Response.Write(Results[0].product.inventories[0].price);

和修改后的对象
class item
{
public product product { get; set; }
public string kind { get; set; }
}

class product
{
public List<inventory> inventories { get; set; }

public product()
{
inventories = new List<inventory>();
}
}

class inventory
{
public double price { get; set; }
}

我希望这能解决您正在寻找的问题。祝你好运!

关于.net - 将 JSON 反序列化为对象 (VB.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7406948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com