Создание динамического XML-класса

#c# #xml

#c# #xml

Вопрос:

У меня есть класс «MsrProgram», который будет сериализован. Однако, если параметр «Number» в «MsrProgram» отличается, мне нужны другие параметры в моем XML-файле. Какой самый простой способ сделать что-то подобное?

Вот мой код:

 public class MsrProgram
{
    [XmlAttribute]
    public string OwnerTypeFullName { get; set; }

    [XmlAttribute]
    public int Number { get; set; }

    [XmlAttribute]
    public int MsrRange { get; set; }

    [XmlAttribute]
    public int TurnoverMeasure { get; set; }
}

public class main
{
   var toolList = (from pos in Configuration.List
      select new Position
      {
         ToolNumber = (int)pos.tlno,
         Tool =
         {
            ToolId = pos.tlno.ToString(),
            Step =
            {
               Position = "1",
               MsrProgram =
               {
                  OwnerTypeFullName = "",
                  Number = 1,
                  MsrRange = "1", //When Number is 1
                  TurnoverMeasure = "1", //When Number is 2
               }
            }
         }
      }
}
  

Комментарии:

1. Вы имеете в виду оператор if?

2. Да, мне нужен оператор if. Но где я могу это сделать?

3. Используйте третичный оператор if или используйте функцию. Вы также можете преобразовать свой linq в цикл foreach, что может упростить задачу. Ваш вопрос действительно не очень понятен, хотя

Ответ №1:

Ваш код не показывает все, поэтому я не могу дать полный код, но это должно заставить вас работать:

 var toolList = (from pos in Configuration.List
    select new Position
    {
        ToolNumber = (int)pos.tlno,
        Tool = new Tool
        {
            ToolId = pos.tlno.ToString(),
            Step = new Step
            {
                Position = "1",
                MsrProgram = new MsrProgram
                {
                    OwnerTypeFullName = "",
                    Number = GetNumber(), // <- fill in what really should be used
                    MsrRange = GetNumber() == 1 ? 1 : 0,
                    TurnoverMeasure = GetNumber() == 2 ? 1 : 0
                }
            }
        }
    }
);
  

Я также добавил несколько new ... инструкций, которые вы пропустили или забыли.