package MyClassA;
use strict;
use warnings 'all';
sub new {
my $classname = shift;
my $self = {};
bless($self, $classname);
my %extras = @_;
@$self{keys %extras} = values %extras;
return $self;
}
sub TO_JSON {
my $self = shift;
return { %{$self} };
}
sub setClassB {
my $self = shift;
$self->{MY_CLASS_B} = shift;
}
sub getClassB {
my $self = shift;
return $self->{MY_CLASS_B};
}
1;
####
package MyClassB;
use strict;
use warnings 'all';
sub new {
my $classname = shift;
my $self = {};
bless($self, $classname);
my %extras = @_;
@$self{keys %extras} = values %extras;
return $self;
}
sub TO_JSON {
my $self = shift;
return { %{$self} };
}
sub getName {
my $self = shift;
return $self->{NAME};
}
1;
##
##
use strict;
use warnings 'all';
use JSON::MaybeXS ':all';
use MyClassA;
use MyClassB;
my $a = MyClassA->new(NAME => 'A instance');
my $b = MyClassB->new(NAME => 'B instance');
$a->setClassB($b);
print JSON->new()->convert_blessed()->encode($a) . "\n";
##
##
use strict;
use warnings 'all';
use JSON::MaybeXS ':all';
use MyClassA;
use MyClassB;
my $line = ;
my $a = bless(JSON->new()->decode($line), 'MyClassA');
print $a->getClassB()->getName() . "\n";