2014-02-13 46 views
2

我的要求连载我的C#类RoomType像下面序列化的Json与变量名

public class RoomType 
{ 
    public string name { get; set; } 
    public string url { get; set; } 
    public string desc { get; set; } 
} 

到下面的JSON格式类似这样的

"room_types" : 
    { 
    "Fenway Room" : 
     { 
      "url" : "http://www.partner-site.com/hotel_commonwealth/fenway_room", 
      "desc" : "One king bed with pillowtop mattress, Frette Italian linens, down bedding, multiple pillows. View of Fenway Park." 
     }, 
    "Commonwealth Room" : 
     { 
      "url" : "http://www.partner-site.com/hotel_commonwealth/commonwealth_room", 
      "desc" : "One king bed with pillowtop mattress, Frette Italian linens, down bedding, multiple pillows. View of Commonwealth Avenue." 
     } 
    } 

如何得到“芬威房“”Commonwalth Room“以这种json格式?

我试过这个建议,但仍然无法得到匿名适合我需要的ActionResult。这里是我不工作的代码现在:

 var rooms = new List<HarRoomType>() 
        { 
         new HarRoomType() 
         { 

         } 
        }; 

     var anonymous = new 
         { 
          type = rooms.ToDictionary(x => x.name, x => new {x.currency, x.discounts}) 
         }; 
     var response = new HotelAvailabilityResponse() 
         { 
          api_version = 4, 
          hotel_ids = new List<int>() 
             { 
              1, 
              2 
             }, 
          start_date = "2014-02-21", 
          hotels = new List<HarHotel>() 
            { 
             new HarHotel() 
             { 
              hotel_id = 1, 
              room_types = anonymous              
             }, 
             new HarHotel() 
             { 
              hotel_id = 2, 
              room_types = new List<HarRoomType>()                
             } 
            } 
         }; 
     return Json(response, JsonRequestBehavior.AllowGet); 

回答

1

你需要的形状数据作为词典:

RoomType[] rooms = ... 

var serializeThis = new { 
    room_types = rooms.ToDictionary(
     x => x.name, 
     x => new { x.url, x.desc } 
    ) 
}; 
+0

哪有这个工作在ASP MVC?我更新了一个代码,我需要在ASP MVC –

+0

@JeeShenLee,应该在MVC工作正常。如果你看到一个特定的问题,你需要告诉我它说 –

+0

更新了这个问题。在room_types =匿名获取对象不兼容的问题 –

1
JavaScriptSerializer js = new JavaScriptSerializer(); 
List<RoomType> roomTypes = new List<RoomType>(){ 
    new RoomType{ desc="desc 1", name="Fenway Room", url="blah.com"}, 
    new RoomType{ desc="desc 2", name="Commonowealth Room", url="blah.com"}, 
}; 

如果你不关心其名称显示为一个属性,然后:

var json = js.Serialize(roomTypes.ToDictionary(x => x.name)); 

如果关心具有名字出现了,不想我吨至:

var json2 = js.Serialize(roomTypes.ToDictionary(x => x.name, x => new { desc = x.desc, url = x.url })); 
0

使用此:

var anonymous= new { 
    type= rooms.ToDictionary(
     x => x.name, 
     x => new { x.url, x.desc } 
    )