Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Dictionary序列化为JSON,但忽略键_C#_Dictionary_Serialization_Json.net - Fatal编程技术网

C# 如何将Dictionary序列化为JSON,但忽略键

C# 如何将Dictionary序列化为JSON,但忽略键,c#,dictionary,serialization,json.net,C#,Dictionary,Serialization,Json.net,我有以下类属性 public Dictionary<int, Hotel> Hotels { get; set; } } 是否可以通过某种方式删除,可能是通过类属性 9036: 因此,所需的JSON成为 "hotels": { "hotel_id": 9036, "name": "My Hotel Name", 无法执行此操作,因为此JSON结构无效: "hotels": { "hotel_id": 9036, "name": "My Hotel Name", ... }, {

我有以下类属性

public Dictionary<int, Hotel> Hotels { get; set; }
}

是否可以通过某种方式删除,可能是通过类属性

9036:

因此,所需的JSON成为

"hotels": { "hotel_id": 9036, "name": "My Hotel Name",

无法执行此操作,因为此JSON结构无效:

"hotels": { "hotel_id": 9036, "name": "My Hotel Name", ... }, { ... }
但是,您可以仅选择值并序列化:

hotels.Values;
要获得此信息:

"hotels": [ { "hotel_id": 9036, "name": "My Hotel Name", ... }, { ... } ]
鉴于这是类的一部分,您需要一个新模型:

public class SomeName
{
    public List<Hotel> Hotels { get; set; }
}

var someName = new SomeName
{
    Hotels = hotels.Values.ToList();
};

我认为问题可能是您需要将hotel_id添加为hotel对象上的属性

根据您的数据来自何处,这可能是一个好主意,而不仅仅是在这种情况下。

格式为hotels:{hotel_id:9036,name:My hotel name,…},。。无效,但可以将其设置为数组hotels:[{hotel_id:9036,name:My hotel name,…}]

您可以通过使用JsonIgnore标记字典并公开包含来自Hotels字典的值的Hotels集合来实现

比如说,

var hotel = new Results
{
    id= "d875e165-4705-459e-8532-fca2ae811ae0",
    HotelDictionary = new Dictionary<int,Hotels> {
    [2323]=new Hotels{Id=2323,Name="Sample1"},
    [1323]=new Hotels{Id=1323,Name="Sample2"},
    }
};
var jsonString = JsonConvert.SerializeObject(hotel,Newtonsoft.Json.Formatting.Indented);

您能提供所需的JSON吗?我已经更新了问题,但基本上我不希望JSON序列化程序忽略字典键值。您是否尝试过选择并序列化serializeHotels.selectx=>x。value@Chenna这与OP想要的正好相反即使更好,请提供一个示例输入。请确保指定所需的确切输出。谢谢,我使用了您的答案,但返回了return HotelDictionary。Selectx=>x.Value.ToList作为列表。
var hotel = new Results
{
    id= "d875e165-4705-459e-8532-fca2ae811ae0",
    HotelDictionary = new Dictionary<int,Hotels> {
    [2323]=new Hotels{Id=2323,Name="Sample1"},
    [1323]=new Hotels{Id=1323,Name="Sample2"},
    }
};
var jsonString = JsonConvert.SerializeObject(hotel,Newtonsoft.Json.Formatting.Indented);
public class Results
{

    public string id { get; set; }
    [JsonIgnore]
    public Dictionary<int,Hotels> HotelDictionary { get; set; }
    [JsonProperty("hotels")]
    public IEnumerable<Hotels> Hotels => HotelDictionary.Select(x=>x.Value);
}

public class Hotels
{
    [JsonProperty("hotel_id")]
    public int Id{get;set;}
    [JsonProperty("name")]
    public string Name{get;set;}
}
{
  "id": "d875e165-4705-459e-8532-fca2ae811ae0",
  "hotels": [
    {
      "hotel_id": 2323,
      "name": "Sample1"
    },
    {
      "hotel_id": 1323,
      "name": "Sample2"
    }
  ]
}