JMSSerializerBundle、MongoDB和XML元数据

JMSSerializerBundle、MongoDB和XML元数据,mongodb,symfony,fosuserbundle,doctrine-odm,jmsserializerbundle,Mongodb,Symfony,Fosuserbundle,Doctrine Odm,Jmsserializerbundle,看来我整晚都在绞尽脑汁。每次尝试序列化文档查询的结果时,我都会收到bool(false)的结果。大概这意味着序列化失败了(太好了!也许你愿意告诉我为什么失败?不?我不这么认为。) 我已经告诉了JMSSerializerBundle我的FOSUserBundle映射的存放位置,例如: jms_serializer: metadata: file_cache: dir: "%kernel.cache_dir%/serializer" a

看来我整晚都在绞尽脑汁。每次尝试序列化文档查询的结果时,我都会收到bool(false)的结果。大概这意味着序列化失败了(太好了!也许你愿意告诉我为什么失败?不?我不这么认为。)

我已经告诉了
JMSSerializerBundle
我的
FOSUserBundle
映射的存放位置,例如:

jms_serializer:
    metadata:
        file_cache:
            dir: "%kernel.cache_dir%/serializer"
        auto_detection: true
        directories:
            FOSUserBundle:
                namespace_prefix: "FOS\\UserBundle"
                path: "%kernel.root_dir%/config/serializer/fosuser"
我定义了一个非常简单的XML序列化程序元数据文件,例如Model.User.XML

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="FOS\UserBundle\Model\User" xml-root-name="user" exclusion-policy="all">
        <property name="username" type="string" expose="true" />
    </class>
</serializer>
结果如何?始终bool(false)

但是,如果我手动构造一个新的
用户
对象,序列化工作正常,例如:

class DefaultController extends Controller
{
    public function serializeAction()
    {
        $userManager = // get the user manager
        $users = $userManager->findUsers();         
        $serializer = $this->get('jms_serializer');

        $user = new User();
        $user->setUsername('testusername');
        Debug::dump('Processing user: '.$user->getUsername());
        $result = $serializer->serialize($user, 'json');
        Debug::dump($result);
        /*return a response */
    }
}
有什么想法吗?我准备好为这件事发疯了

编辑:进一步思考,值得注意的是,我的序列化元数据似乎没有得到尊重。如上所示,我只公开用户名,但当我在控制器中创建一个新的
用户
并序列化它时,我看到的不仅仅是公开的用户名,我看到:
用户名
启用
锁定
过期
角色
,以及
凭证
。我怀疑我会看到每个字段,如果其中有非空数据

EDIT(2):我看到过在
序列化程序的默认对象构造函数上使用
DoctrineObjectConstructor
的引用;并采取了本文中确定的步骤,希望它们能够解决我的问题。唉,他们没有这样做(看起来这个答案和问题更适合反序列化,不管怎样),而且bool(false)的结果仍然存在


编辑(3):序列化元数据未被提取的问题似乎是由于
自动检测
目录的显式声明混合在一起造成的,如我问的另一个问题所示:

如何获取usermanager?你能确认findUsers()确实返回了控制器中的用户实体集合吗?你能解决问题吗?@nifr问题仍然存在,我的用户管理器过载,所以我只能通过容器获取它,例如
$this->get('my.User.doctor.User_manager')
,是的,它确实会在找到的用户上返回一个光标。如果我不尝试序列化数据,而是在遍历游标时转储用户的结果,我会看到返回的用户数据。
class DefaultController extends Controller
{
    public function serializeAction()
    {
        $userManager = // get the user manager
        $users = $userManager->findUsers();         
        $serializer = $this->get('jms_serializer');

        $user = new User();
        $user->setUsername('testusername');
        Debug::dump('Processing user: '.$user->getUsername());
        $result = $serializer->serialize($user, 'json');
        Debug::dump($result);
        /*return a response */
    }
}