yonet77的な雑記帳

日々思いついたネタなどを書き留めておきます

Force.comでのJSON Support -ApexコントローラのRemoteActionを添えて-(その後)

以前、Force.comでのJSON Support - yonet77的な雑記帳にて、管理パッケージ内にあるカスタムオブジェクトの日付項目をJSON.deserializeできない...ということを書きました。
うん、もう覚えてないよねw


ことの発端は、Summer '12 になった直後に、JSON.deserialize の挙動がおかしくなったことでした。

でも、その1週間後くらいには直ってたので、ヨカッタヨカッタと思ったところで、もう1つふと思い出しました。


そう、管理パッケージ内のカスタムオブジェクトの日付項目を含めてJSON.deserializeするとエラーになってた件です。
 ↓

FATAL_ERROR System.JSONException: Cannot deserialize instance of date from VALUE_STRING value 2011-12-30


今回の修正で、挙動が変わったかもしれないッ・・・!
ということで、レッツトライ。

こんなコードを走らせてみました。

Type objType = Type.forName('gii__SalesOrder__c');    	
String paramString = '{"gii__RequiredDate__c":"2011-12-30", "gii__Released__c":true, "Phase__c":"ご来店", "Remarks__c":"ABCDEFGHIJKLMN,4444aaa"}';
gii__SalesOrder__c testSO = (gii__SalesOrder__c)JSON.deserialize(paramString, objType);
System.debug('** testSO : ' + testSO);

14:21:46.132 (14132484000)|USER_DEBUG|[172]|DEBUG|** testSO : gii__SalesOrder__c:{gii__RequiredDate__c=2011-12-30 00:00:00, Remarks__c=ABCDEFGHIJKLMN,4444aaa, Phase__c=ご来店, gii__Released__c=true}


おや・・?なんか日付もちゃんとdeserializeされてるじゃないですか!
何やらパッケージ管理下にあるカスタムオブジェクトの日付項目も問題なくJSON.deserializeを使えるようになってましたー。
もちろん、これも動きました。↓

Type objType = Type.forName('List<gii__SalesOrder__c>');    	
String paramString = '[{"gii__RequiredDate__c":"2011-12-30", "gii__Released__c":true, "Phase__c":"ご来店", "Remarks__c":"ABCDEFGHIJKLMN,4444aaa"}]';
List<gii__SalesOrder__c> testSOs = (List<gii__SalesOrder__c>)JSON.deserialize(paramString, objType);
System.debug('** testSOs : ' + testSOs);

14:57:01.629 (11629374000)|USER_DEBUG|[176]|DEBUG|** testSOs : (gii__SalesOrder__c:{gii__RequiredDate__c=2011-12-30 00:00:00, Remarks__c=ABCDEFGHIJKLMN,4444aaa, Phase__c=ご来店, gii__Released__c=true})

とりあえず、思った通りの挙動になったみたいで良かったです。
ではまた次回(※未定)!