Как структурировать WDDX ColdFusion и поддерживать указатели или рекурсию

Я использую WDDX для хранения структуры ColdFusion в базе данных, и я хотел бы сохранить указатели. Вот пример (извините, сокращенная запись может быть полна ошибок, потому что я вряд ли когда-либо ее использую):

tshirt={color={selected="red",options=["red","blue","yellow","white"]}};
tshirt.front= {colors=tshirt.color,design="triangle",ink="green"};
tshirt.back= {color=tshirt.color,design="square",ink="black"};

В данный момент tshirt.front.color, tshirt.back.color и tshirt.color являются указателями на одну и ту же структуру. Если я изменю tshirt.color.selected на "синий", tshirt.back.color.selected и tshirt.front.color.selected также будет "синим".

Тем не менее, предположим, что я WDDX футболка, а затем unWDDX это. Когда я меняю tshirt.color.selected на "white", он не изменяется в tshirt.front.color.selected или tshirt.back.color.selected.

Кто-нибудь может предложить другой способ сериализации и десериализации данных, которые бы сохранили указатели?

Просто несколько ссылок, которые я использовал для исследования до сих пор:

1 ответ

Решение

Используйте ObjectSave (), новый в CF9:

Описание

Преобразует массив ColdFusion, CFC, объект DateTime, объект Java, запрос или структуру в сериализуемый двоичный объект и, при необходимости, сохраняет объект в файл.

Возвращает

Сериализуемое двоичное представление объекта.

<cfscript>
    shirtdata = objectSave(tshirt);
    tshirt2 = objectLoad(shirtdata);

    tshirt2.color.selected = "blue";
    writeOutput(tshirt2.front.colors.selected);  // "blue" => reference kept
</cfscript>

Демонстрация в реальном времени: http://www.trycf.com/scratch-pad/pastebin?id=L0g211aD

Другие вопросы по тегам