используйте эту структуру
struct YourStruct: Codable {
let menuName: String
let menuID: Int
let menuGroups: [MenuGroup]
enum CodingKeys: String, CodingKey {
case menuName
case menuID = "menuId"
case menuGroups
}
}
struct MenuGroup: Codable {
let type, name: String
let menuEntry: [MenuGroupMenuEntry]
}
struct MenuGroupMenuEntry: Codable {
let type: String
let name: String?
let menuEntry: [MenuEntryMenuEntry]?
let productName, productPrice: String?
}
struct MenuEntryMenuEntry: Codable {
let type, productName, productPrice: String
}
и в datatask после проверки, что у вас нет ошибки
if let data = data {
let decoder = JSONDecoder()
guard let decodedJson = try? decoder.decode(YourStruct.self, from: data) else { completion(nil) ; return }
}
надеюсь, что эта помощь
убийство экземпляров Cassini, как указано выше, у меня не сработало. ScottGu написал об этой проблеме
установка атрибута batch="false" в секции компиляции в web.config помогла мне.
<configuration>
<system.web>
<compilation debug="false" batch="false"></compilation>
</system.web>
</configuration>
Это указывает ASP.NET на динамическую компилировать отдельные файлы .aspx/.ascx в отдельные сборки. Это позволяет избежать проблемы круговой ссылки, которая вызывает исключение.
в IIS необходимо перезапустить его путем открытия командной строки и ввода iisreset
затем хит входит, однако если Ваше использование сборки в веб-сервере Visual Studio (Кассини) затем эта привычка решает Вашу проблему. Можно завершить все рабочие экземпляры Cassini путем ввода (точно как это потому что его Чувствительное к регистру): taskkill /f /im "WebDev.WebServer.exe"
и удар входит. Вы будете затем видеть следующее сообщение: SUCCESS: The Process "WebDev.WebServer.EXE" with PID <some #> has been terminated.
Для меня, закрывая IDE, закрывая веб-сайт (IIS или Cassini), удаляя все мои временные файлы asp.net, запуская IDE и делая полную компиляцию добивается цели.
Причина МОГЛА БЫ состоять в том, что некоторый другой DLL, на который Вы ссылаетесь, мог бы ссылаться на более старую/более новую версию указанного блока. Таким образом, различные части приложения ссылаются на различные версии блока. Я столкнулся с проблемой как это также. Для разрешения его я вынудил приложение использовать новую версию:
Я изменил все свои ссылки в web.config для указания на более новую версию. В моем случае это была Система. Сеть. Блок расширений, который вызывал проблемы. Я изменил всех их с 1.0.60125.0 до 3.5.0.0
Затем, я добавил эти строки к своему web.config, который в основном говорит Вашему приложению "передавать" все ссылки на старую версию блока к новому:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;sitefinity\admin\bin" />
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Telerik.Security" publicKeyToken="dfeaee0e3978ac79" />
<bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Telerik.Cms.Web.UI" publicKeyToken="dfeaee0e3978ac79" />
<bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" />
<bindingRedirect oldVersion="2008.1.515.20" newVersion="2008.2.1001.20" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Я не предложил это решение, но нашел его где-нибудь, что я не могу помнить. Однако я не думаю, что когда-либо видел объяснение точно, почему это происходит также!
Исправить эту ошибку довольно просто, но для этого требуются некоторые редко используемые объявления (сложная часть - это копаться в правильной документации;).
См. ECMA-334 , Раздел, 16.3 « Директивы внешнего псевдонима »
Если вы управляете «своим» источником и связываете с другой сборкой «их» двоичный файл, вы не можете изменить (или сделать не хочу тоже менять :) спецификаторы пространства имен / типа (например, ОБА из вас объявляют Систему ). Я действительно сталкивался с этим в последнее время изрядно, со всеми обновлениями бета / альфа / версии для CLR / DLR, MS много перемешивала в своем опубликованном пространстве имен.
Когда вы импортируете сборку «их», обычно компилятор установит его в глобальное (зарезервированное) пространство имен. В MSVC вы переходите к свойствам в ссылке на сборку, переходите туда, где написано « Псевдонимы », затем вы можете указать новое имя, другое , кроме глобального. Или на самом деле несколько имен.
Допустим, вы используете образное имя « global2 ».
Затем вы переходите к своим исходным файлам и в TOP перед любые объявления пространств имен, которые вы размещаете;
extern alias global2;
using global2::System;
Затем ваш код может использовать типы из global2, такие как "Int32" или что-то еще, вы все равно можете переименовать его через;
extern alias global2;
using global2::System;
using orig = System;
У меня только что была эта проблема. Оказывается, я случайно перетаскивал файлы из одного проекта в другой, что создавало дубликат. Мне потребовалось некоторое время, чтобы найти проблему, потому что файлы были скрыты в папке «Свойства» (в которую я никогда не заглядываю).
В любом случае, что помогло мне решить проблему, так это попадание в файл, который выдавал ошибку , R-щелчок по ошибочной строке и "переход к определению". Находясь в определении, вы можете видеть, какой физический файл вы смотрите. Если это не то, что должно быть, значит, вы нашли свою проблему.
Я знаю, что это тривиально, но я потратил на это около часа времени, так что надеюсь, что эта информация будет полезна кому-нибудь.
btw, CodeBehind
не устарел и не используется!
CodeBehind=
для страниц в Web Application (с файлами .Designer.cs
) и CodeFile=
для страницы в Web Site (динамически скомпилированные сборки, поэтому без файлов .Designer.cs
)