diff --git a/packages/fcl-json/src/fpjsonrtti.pp b/packages/fcl-json/src/fpjsonrtti.pp index b977ae1429..56783167f9 100644 --- a/packages/fcl-json/src/fpjsonrtti.pp +++ b/packages/fcl-json/src/fpjsonrtti.pp @@ -396,9 +396,8 @@ begin If B then exit; end; - if (PropData.JSONType=jtNull) then - if Not (jdoIgnoreNulls in Options) then - DoRestoreProperty(AObject,PropInfo,PropData); + if (PropData.JSONType<>jtNull) or not (jdoIgnoreNulls in Options) then + DoRestoreProperty(AObject,PropInfo,PropData) except On E : Exception do If Assigned(FOnPropError) then diff --git a/packages/fcl-json/tests/testjsonrtti.pp b/packages/fcl-json/tests/testjsonrtti.pp index db59b6b073..7fdc981e76 100644 --- a/packages/fcl-json/tests/testjsonrtti.pp +++ b/packages/fcl-json/tests/testjsonrtti.pp @@ -122,6 +122,7 @@ type procedure DeStream(JSON: TJSONStringType; AObject: TObject); procedure DeStream(JSON: TJSONObject; AObject: TObject); procedure DoDateTimeFormat; + Procedure DoNullError; protected procedure SetUp; override; procedure TearDown; override; @@ -138,6 +139,8 @@ type Procedure TestVariantString; Procedure TestVariantArray; procedure TestEmpty; + procedure TestNullError; + procedure TestNull; procedure TestBoolean; procedure TestInteger; procedure TestIntegerCaseInsensitive; @@ -284,6 +287,23 @@ begin AssertEquals('Empty Tag',0,TComponent(FToFree).Tag); end; +procedure TTestJSONDeStreamer.TestNullError; + +begin + AssertException('Null error',EJSON, @DoNullError); +end; + +procedure TTestJSONDeStreamer.TestNull; +Var + B : TBooleanComponent; + +begin + B:=TBooleanComponent.Create(Nil); + DS.Options:=DS.Options+[jdoIgnoreNulls]; + DeStream('{ "BooleanProp" : null }',B); + AssertEquals('Correct boolean value',False,B.BooleanProp); +end; + procedure TTestJSONDeStreamer.DeStream(JSON : TJSONStringType; AObject : TObject); begin @@ -428,6 +448,15 @@ begin DeStream('{"DateTimeProp" : "'+DateTimeToStr(RecodeMillisecond(Now,0))+'"}',FToFree); end; +procedure TTestJSONDeStreamer.DoNullError; +Var + B : TBooleanComponent; + +begin + B:=TBooleanComponent.Create(Nil); + Destream('{ "BooleanProp" : null }',B); +end; + procedure TTestJSONDeStreamer.TestDateTimeFormat; Const