我该如何在Perl Dancer2中使用XML序列化程序?

3
在Dancer中,您可以使用以下内容:
set serializer => 'Mutable';

或者

set serializer => 'XML'

Dancer2:

set serializer => 'XML'

你得到了

Unable to load class for Serializer component XML: Can't locate Dancer2/Serializer/XML.pm

CPAN上没有Dancer2::Serializer::XML

Dancer2中的可变性(Mutable)仅支持JSON、YAML和Dumper格式 :-(


1
目前Dancer2中还没有XML序列化器,CPAN上也没有相关模块。这是Dancer1仍然优于Dancer2的(少数?)情况之一。但你可以很容易地编写自己的Dancer2::Serializer::XML,或者手动将数据编码为XML格式。 - Daniel Böhmer
1个回答

2

这是一个简单的入门指南:

package Dancer2::Serializer::XML;
use Moo;
use Carp 'croak';
use Encode;
use Class::Load 'load_class';
with 'Dancer2::Core::Role::Serializer';

has '+content_type' => ( default => sub {'text/xml'} );

sub BUILD { load_class('XML::Simple') }

sub serialize {
    my ( $self, $entity ) = @_;
    XML::Simple::XMLout($entity);
}

sub deserialize {
    my ( $self, $content ) = @_;
    XML::Simple::XMLin($content);
}

1;

我刚从Dancer::Serializer::XMLDancer2::Serializer::YAML组装了这个。它远未完成或准备好发布,但也许对你来说是一个开始? 我将其作为社区维基回答提供。

自2012年(此回答发布前的2.5年)起,XML::Simple就被记录为已过时。为什么?因为它不支持Unicode。这个示例代码看起来很像现在在CPAN中的Dancer2::Serializer::XML模块...同样使用XML::Simple,因此在Unicode上出现错误。 :( - TheAmigo
@TheAmigo 我之前不知道这个问题,也认为这是2020年的一个严重漏洞。我认为你应该将其作为序列化模块的一个 bug 提交,并且它很可能会被修复。 - Daniel Böhmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接