support struct marshal