2016-09-24 4 views
0

Я пытаюсь сериализовать этот класс, который отобразит это в XML-документе.Сериализация в документе Xml

<InventoryType> 
    <Date>20160925</Date> 
    <HotelId>123</HotelId> 
    <RoomType>KB</RoomType> 
    <Quantity>5</Quantity> 
</InventoryType> 
<InventoryType> 
    <Date>20160901</Date> 
    <HotelId>123</HotelId> 
    <RoomType>QB</RoomType> 
    <Quantity>3</Quantity> 
</InventoryType> 

У меня есть список, и я хочу пройти через него и вставить 3 даты. как выше. но я не могу понять, как это сделать. Я знаю, что мне нужен forloop для datetime. но мне нужен еще один внутренний цикл для списка?

public void CreateInvenList() 
{ 
    Random rnd = new Random(); 
    int num = rnd.Next(1, 10); 
    DateTime end = new DateTime(2016,09,28); 
    DateTime start = new DateTime(2016, 09, 25); 

    List<InventoryType> Inventoryttype = new List<InventoryType>(); 
    Inventoryttype.Add(new InventoryType(start, "123", "KB", num)); 
    Inventoryttype.Add(new InventoryType(start, "124", "qB", num)); 

    for (DateTime date = start; date < end; date = date.AddDays(1)) 
    { 
     for (??) 
     { 
      // what goes in here? 
     } 
    } 

    serial = new XmlSerializer(Inventoryttype.GetType()); 
    sw = new StreamWriter(Inventory_Filename); 
    serial.Serialize(sw, Inventoryttype); 
    sw.Close(); 
} 
+0

для (инвентарь var в Inventoryttype)? Я действительно не понимаю, что вы пытаетесь сделать. Если вы хотите добавить все даты во все объекты в списке, то это все. – TigOldBitties

ответ

0

Нет, не нужен еще один цикл, как присвоить значение для каждого дня

for (DateTime date = start; date < end; date = date.AddDays(1)) 
{ 
    num = rnd.Next(); 
    Inventoryttype.Add(new InventoryType(date, "123", "KB", num)); 
    Inventoryttype.Add(new InventoryType(date, "124", "qB", num)); 
} 

Это будет работать, если вы хотите добавить только те типы номеров/отеля для данных дней. Однако, если у вас есть источник данных с отелями и номерами, вам нужно будет добавить внутренний контур для изменения отелей, если типы номеров меняются в зависимости от гостиницы, тогда вы должны добавить еще одну внутреннюю петлю для комнат.

Если у вас есть источник данных с несколькими гостиницами, но есть «КБ» и «QB» в качестве общих типов номеров среди всех отелей код должен выглядеть следующим образом:

for (DateTime date = start; date < end; date = date.AddDays(1)) 
{ 
    foreach (var hotel in hotels) 
    { 
     num = rnd.Next(); 
     Inventoryttype.Add(new InventoryType(date, hotel.id, "KB", num)); 
     Inventoryttype.Add(new InventoryType(date, hotel.id, "QB", num)); 
    ) 
} 

И в том случае, если вы бы конкретные типы номеров для каждых гостиниц и количества номеров в умолчанию для типов номеров вы можете иметь, что:

for (DateTime date = start; date < end; date = date.AddDays(1)) 
{ 
    foreach (var hotel in hotels) 
    { 
     foreach (var roomType in hotels.roomTypes) 
     { 
      num = rnd.Next(); 
      Inventoryttype.Add(new InventoryType(date, hotel.id, roomType.id, num)); 
     } 
    ) 
} 

Надеются, что это помогает.

+0

да, что это помогает. теперь проблема im имеет случайный rnd = new Random(); дает мне одинаковое число для всех. который является номером в 'Inventoryttype.Add (новый InventoryType (date, hotel.id, roomType.id, ** num **));' – user6875449

+0

Если вы хотите, чтобы случайное время все время менялось, вы должны поместить его в тот же как тот, который вы добавляете в объекты inventorytype. Обновление моего ответа. – IamNguele

+0

Ah k. понял. Да, сейчас это меняется. Спасибо за помощь – user6875449