Это на самом деле происходит потому, что сложные объекты - это то, что заставляет результирующий json-объект терпеть неудачу. И это терпит неудачу, потому что, когда объект отображается, он отображает детей, который отображает их родителей, делая круговую ссылку. Json потребовал бы бесконечного времени для его сериализации, поэтому он предотвращает проблему с исключением.
Отображение структуры Entity Framework также приводит к такому же поведению, и решение состоит в том, чтобы отбросить все нежелательные свойства.
Просто объясняя окончательный ответ, весь код будет выглядеть следующим образом:
public JsonResult getJson()
{
DataContext db = new DataContext ();
return this.Json(
new {
Result = (from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
}
, JsonRequestBehavior.AllowGet
);
}
Он также может быть следующим, если вы не хотите, чтобы объекты внутри свойства Result
:
public JsonResult getJson()
{
DataContext db = new DataContext ();
return this.Json(
(from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
, JsonRequestBehavior.AllowGet
);
}
Попробуйте сделать что-то вроде этого,
from signal import pause
from gpiozero import Button
class pressException( Exception ):
pass
def raisePressException():
raise pressException( 'Button held' )
try:
push = Button( 5 )
push.when_held = raisePressException()
pause()
except pressException:
print( 'Exception accepted' )
. Причина, по которой это происходит, заключается в том, что вы вызываете ошибку за пределами try и исключения, и, следовательно, она не может перехватить ошибку, а также вы вызывали свою собственную функцию повышения в цикле, даже если вы попытаетесь поймать свой собственный код, он окажется в цикле рекурсии
, которые поднимаются из этой линии
raise pressException( 'Button held' )
, так что вы должны заключить в try ... except
правую линию, ту или уровень вверх, где вы запускаете liftPressException
, кстати, это не имеет смысла:
def raisePressException():
raise pressException( 'Button held' )
push = Button( 5 ) # not able to be reached or achieved.
push.when_held = raisePressException
просто использовать
raise pressException( 'Button held' )