我正在尝试构建一个类,我将其序列化为Web请求的主体。
序列化对象时尝试实现的输出是:
{
"findCompletedItemsRequest": {
"keywords": "searchtext",
"itemFilter": [
{
"name": "SoldItemsOnly",
"value": "true"
}
],
"outputSelector": "PictureURLLarge",
"outputSelector": "SellerInfo",
"paginationInput": {
"entriesPerPage": "100",
"pageNumber": "1"
}
}
}
对于字段" outputSelector',我可以在0,1或多次使用它。 我怎么在班上定义这个?我尝试过搜索,但我不确定我想要实现的目标是什么。如果我使用列表或数组,它只创建outputSelect JSON属性,其中包含一个数组,而不是多个outputSelector属性。
这是我到目前为止所做的事情(其他评论受到欢迎,因为我来自程序编程背景)
public class eBaySearchBody
{
public FindCompletedItemsRequest findCompletedItemsRequest = new FindCompletedItemsRequest();
public class FindCompletedItemsRequest
{
public string keywords { get; set; }
public List<itemFilters> itemFilter { get; set; }
public string sortOrder { get; set; }
public PaginationInput paginationInput = new PaginationInput();
}
public class PaginationInput
{
public string entriesPerPage { get; set; }
public string pageNumber { get; set; }
}
public class itemFilters
{
public string name { get; set; }
public string value { get; set; }
}
}
答案 0 :(得分:1)
它不是有效的JSON。它有SyntaxError:Duplicate key&#39; outputSelector&#39;在第9行。
如果考虑使用outputSelector数组,则需要按如下方式修改代码以生成有效的JSON。 示例有效JSON:
{
"findCompletedItemsRequest": {
"keywords": "searchtext",
"itemFilter": [{
"name": "SoldItemsOnly",
"value": "true"
}],
"outputSelector": ["PictureURLLarge", "SellerInfo"],
"paginationInput": {
"entriesPerPage": "100",
"pageNumber": "1"
}
}
}
示例C#代码修改:
namespace Solutions{
using System.Collections.Generic;
using Newtonsoft.Json;
public class EBaySearchBody{
public class FindCompletedItemsRequest{
[JsonProperty("keywords", Order = 1)]
public string Keywords { get; set; }
[JsonProperty("itemFilter",Order = 2)]
public List<ItemFilter> ItemFilters { get; set; }
[JsonProperty("outputSelector", Order = 3)]
public List<string> OutputSelectors { get; set; }
[JsonProperty("paginationInput", Order = 4)]
public PaginationInput PaginationInput { get; set; }
}
public class PaginationInput{
[JsonProperty("entriesPerPage", Order = 1)]
public string EntriesPerPage { get; set; }
[JsonProperty("pageNumber", Order = 2)]
public string PageNumber { get; set; }
}
public class ItemFilter{
[JsonProperty("name", Order = 1)]
public string Name { get; set; }
[JsonProperty("value", Order = 2)]
public string Value { get; set; }
}
[JsonProperty("findCompletedItemsRequest")]
public FindCompletedItemsRequest FindCompletedItemsRequestObject { get; set; }
/// <summary>
/// Create a <see cref="EBaySearchBody"/>object and serialize it to a JSON stream
/// </summary>
/// <returns></returns>
public static string WriteFromObject()
{
//Create EbaySearchBody object.
EBaySearchBody searchBody = new EBaySearchBody(){
FindCompletedItemsRequestObject = new FindCompletedItemsRequest(){
Keywords = "searchtext",
ItemFilters = new List<ItemFilter>(){
new ItemFilter {
Name = "SoldItemsOnly",
Value = "true"
}
},
OutputSelectors = new List<string>(){
"PictureURLLarge",
"SellerInfo"
},
PaginationInput = new PaginationInput(){
EntriesPerPage = "100",
PageNumber = "1"
}
}
};
return JsonConvert.SerializeObject(searchBody);
}
}
}