Это является продолжением до моего предыдущего поста, здесь: Querying and Filtering Array of JObjects with LinqJSON.NET: выпрямления JArray к JObjects внутри Linq Query
Я отправил dotnetfiddle здесь: https://dotnetfiddle.net/s75wGu
Извинения, но я не мог понять, почему я получаю сообщение об ошибке в System.Collections.Generic.IEnumerable в dotnetfiddle, но программа работает под Linqpad и Visual Studio.
Источник JSON выглядит следующим образом:
{
"Object": {
"NM": "Name1",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08",
"Object": [
{
"NM": "Name2",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08",
"Object": [
{
"NM": "Name3",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
},
{
"NM": "Name4",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
},
{
"NM": "Name5",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
]
}
]
}
}
Как вы можете видеть, код предназначен для запроса JSON документа и придавить его к List<JObject>
объекта.
Предложение if (jo is JObject)
должно быть просто: Если итерации Linq находит объект JObject, он создает экземпляр joWork
JObject, добавляет свойства к нему, и возвращает единственный joWork
объект. Это прекрасно работает.
Но моя проблема работает с предложением if (jo is JArray)
: Здесь я думаю, что Linq ожидает, что я вернусь к одному объекту JObject, но у меня есть массив JObjects, который я хочу вернуть как отдельные JObjects.
Выход производства моего dotnetfiddle кода заключается в следующем:
joWork-Object: {
"_Parent": "",
"NM": "Name1",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork-Array: {
"_Parent": "Name1",
"_Group": 1,
"NM": "Name2",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork:
joWork-Array: {
"_Parent": "Name2",
"_Group": 2,
"NM": "Name5",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork:
joWork:
joWork:
Обратите внимание, что мы имеем Имя объекта (NM) name1, Имя2, то только Name5. Я хотел бы иметь Name1, Name2, Name3, Name4 и Name5, каждый из которых имеет свойство _Parent, которое содержит свойство NM родительского объекта.
Я понимаю, что получаю только имя5, потому что оператор JArray if в моем запросе Linq возвращает только последний элемент в массиве. Я хотел бы вернуть все элементы массива. Конечный результат должен выглядеть следующим образом:
joWork-Object: {
"_Parent": "",
"NM": "Name1",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork-Array: {
"_Parent": "Name1",
"_Group": 1,
"NM": "Name2",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork-Array: {
"_Parent": "Name2",
"_Group": 2,
"NM": "Name3",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork-Array: {
"_Parent": "Name2",
"_Group": 2,
"NM": "Name4",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
joWork-Array: {
"_Parent": "Name2",
"_Group": 2,
"NM": "Name5",
"AA": "Val01",
"BB": "Val02",
"CC": "Val03",
"DD": "Val04",
"EE": "Val05",
"FF": "Val06",
"GG": "Val07",
"HH": "Val08"
}
Ваш вопрос немного неясен. Можете ли вы [изменить] свой вопрос, чтобы создать полную [mcve] вашей проблемы? На данный момент ваш код не компилируется. Кроме того, вам было бы полезно показать весь желаемый результат, а не только фрагменты. И вы уверены, что второй фрагмент JSON не должен быть '{" Name ":" Array1B ", ..'? – dbc
Чтобы подтвердить, вы хотите вернуть * два идентичных значения 'JObject' * при посещении массива' 'Array1A ''? – dbc
Извинения, вы правы. Я создам рабочий пример и объясню, что мне нужно. Я должен был опубликовать это в ближайшее время. Благодарю. – Jazimov