Создание экземпляра неровного массива с синтаксисом JSON

#c# #xsd.exe

#c# #xsd.exe

Вопрос:

У меня есть XSD.exe созданный класс. Я использую грубую инверсию элемента управления. Мой тестовый объект работал, пока я не добавил этот причудливый фрагмент XML:

   <items>
    <item>
      <model>1000</model>
      <description>Torque wrench</description>
      <material>1545454</material>
      <lot>3</lot>
      <serial></serial>
      <transferQty>1</transferQty>
      <shipQty></shipQty>
    </item>
    <item>
         //..item 2
    </item>
    <item>
          //...item 3
    </item>
  </items>
</itemOrder>
  

Теперь создание объекта GeneratedByXsdClass не выполняется.

     GeneratedByXsdClass.items = new itemOrderItemsItem[][]{
        new itemOrderItemsItem[1][]//this hardcoded 1 bothers me.  better way?
        {
            new itemOrderItemsItem[]
            {
                new itemOrderItemsItem()
                {
                    model = "1000",
                    description = "Torque Wrench",
                    material = "10002525",
                    lot = "3",
                    serial = "",
                    transferQty = "1",
                    shipQty = ""
                }
            }
        }
    };
  

Ошибка компилятора:

 Error   3   Cannot implicitly convert type 'itemOrderItemsItem[][]' to 'itemOrderItemsItem[]'   
  

Я открыт для изменения xsd.exe сгенерированный класс, если это облегчает жизнь. Я действительно просто хочу <item> повторить N раз.

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

1. Какое это имеет отношение к Json?

2. Я думал, что синтаксис, который я использую для создания экземпляра свойств, был синтаксисом JSON. Это неверно?

3. Json — это формат данных с синтаксисом, который является подмножеством Javascript. То, что у вас есть, является примером синтаксиса инициализации встроенного объекта c #.

Ответ №1:

Упростите свой пример до этого:

 new int[][]{
    new int[1][]//this hardcoded 1 bothers me.  better way?
    {
        new int[]
        {
            4
        }
    }
}
  

Теперь вы должны быть в состоянии увидеть, в чем проблема; вы пытаетесь поместить int[][] внутри int[][] an, а компилятор говорит, что ожидал a int[] . Удалите строку с комментарием:

 new int[][]{
    new int[]
    {
        4
    }
}
  

Это эквивалентно в вашем коде:

 GeneratedByXsdClass.items = new itemOrderItemsItem[][]{
    new itemOrderItemsItem[]
    {
        new itemOrderItemsItem()
        {
            model = "1000",
            description = "Torque Wrench",
            material = "10002525",
            lot = "3",
            serial = "",
            transferQty = "1",
            shipQty = ""
        }
    }
};