json 如何将键值对转换为自定义对象列表

au9on6nz  于 2023-05-02  发布在  其他
关注(0)|答案(2)|浏览(135)

我有一个Hotel的keyValupair详细信息:

//This is where the data comes from : -

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
dynamic hotels1 = (dynamic)json_serializer.DeserializeObject(jso);
var keyValuePairs = hotels1["hotels"];

var hotelList = keyValuePairs["hotels"];   // hotelList[0]  ={'key'='Code' ;value='123'} 
                                           //{'key'='Name' 
                                           // ;value='Sheraton'}

如何将其转换为Hotel列表

List<Hotel> hotaals = new List<Hotel>();

其中Hotel

public class Hotel {
    public int code { get; set; }
    public string name { get; set; }
}

我使用for循环来Map字段,但我的大老板说这效率很低,我必须使用Linq。
我使用的循环

foreach (dynamic h in hotelList) {

   oneHotel = new Hotel();
   oneHotel.code = h["code"];
   oneHotel.name = h["name"];
   myHotels.Add(oneHotel);
}
nfzehxib

nfzehxib1#

暴力的方法是通过硬编码属性将字典投影到对象上:

List<Hotel> hotaals = hotelList.Select(kvp => new Hotel {
                                    code = kvp['Code'],
                                    name = kvp["Name"]
                                    })
                               .ToList();

我还想质疑你的“伟大老板”所说的“效率低下”是什么意思。

qgelzfjb

qgelzfjb2#

首先,您可以获得初始数据:
var hotelList = keyValuePairs["hotels"];
然后使用linq创建新列表:

var hotelObjects = hotelList.Select(hotel => new Hotel { code = hotel.key, name = hotel.name});

现在要弄清楚linq在幕后做的是一个遍历对象的迭代循环(就像foreach一样),为hotelList中的每个项目创建一个新的Hotel对象,并将它们作为IQueryable<Hotel>返回。如果不需要IQueryable<>,只需应用.ToArray().ToList()
现在听起来你的酒店详细信息的初始列表不是结构化的,所以你可能必须修改我上面提供的linq查询来适应列表的结构。
你可能需要更接近这个的东西:

// Gives IQueryable<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]});

// Gives Array<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]}).ToArray();

// Gives List<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]}).ToList();

相关问题