2016-06-10 26 views
2

Ich habe eine Anforderung zum Speichern aller ColdFusion-Ausnahmedetails in einer Datenbanktabelle. Also plane ich, die cfcatch-Struktur zu serialisieren und sie in db zu speichern, aber ich habe ein Problem. Die Struktur vor und nach der Serialisierung ist nicht die gleiche. Also für Testzwecke ist, hier kleiner Code-Snippet ich auf meinem lokalen versucht,SerializeJSON und DeserializeJSON funktionieren nicht ordnungsgemäß für den cfcatch-Block

<cftry> 
<cfset a = 5/0> 
<cfcatch type="any"> 
    <cfdump var="#cfcatch#"> 
    <cfset a = SerializeJSON(cfcatch)> 
    <cfdump var = "#DeserializeJSON(a)#"> 
</cfcatch> 
</cftry> 

Hier der Screenshot von der ersten Dump (Original cfcatch). enter image description here Hier ist der Screenshot aus dem zweiten dump (d.h serialisiert und deserialisiert dann)

enter image description here

+0

Versuchen Sie '' - beachten Sie, dass das Duplikat jedoch eine tiefe Kopie erstellt. –

+0

Dank @JohnWhish, Seine Arbeit, Warum brauchen wir hier doppelte Funktion? – user3714162

+0

Die Variable cfcatch ist nicht wirklich eine ColdFusion-Struktur, das Duplikat zwingt sie zu einer ColdFusion-Struktur, die dann serialisiert werden kann. –

Antwort

4

als Kommentar am OP Frage eingegeben, aber es ist nützlich, um andere, falls auch hier hinzufügen.

Versuchen:

<cfset a = SerializeJSON(duplicate(cfcatch))> 

Obwohl, wenn Sie es Dump, die cfcatch Daten wie ein Coldfusion-Struktur aussieht, ist es nicht wirklich, die duplicate zwingt sie zu einer Coldfusion-Struktur, die es dann serialisiert. Beachten Sie, dass das Duplikat eine tiefe Kopie erstellt.

Weitere Informationen dazu, was cfcatch ist, finden Sie unter https://stackoverflow.com/a/30630495/291653.