Serialisation/deserialisation no longer works

Aperta
#1,556 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
30/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
php
Ambito
api

Direzione di ricerca

Inizia con i modelli Message e ItemBody e con la sottoscrizione al backing store descritta nel report, quindi riproduci il problema con PHP serialize() e unserialize(). Esamina readme.md e upgrade.md per verificare le indicazioni sulla serializzazione. Il lavoro è completato quando la serializzazione e la deserializzazione native funzionano per i modelli SDK contenenti oggetti annidati, oppure quando la documentazione indica chiaramente l’alternativa supportata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

type:enhancement
Describe the bug

Native serialisation and deserialisation of models no longer works in v2.

In the msgraph-sdk-php-core readme.md file it states:

We provide Microsoft Graph models for easy serialization and deserialization.

If you would like to leverage the models we provide, please take a look at the [Microsoft Graph PHP SDK](https://packagist.org/packages/microsoft/microsoft-graph) and for beta models - the [Microsoft Graph Beta PHP SDK](https://packagist.org/packages/microsoft/microsoft-graph-beta).

Sadly this is no longer the case. As soon as any nested object is added to a model, serialisation fails as the embedded closures cannot be serialised.

Admittedly this text is obviously written for V1 as it references Graph Beta, but I don't think it has been intentional to remove the ability to natively serialise models. If that is the case, I think that is a bad move. I don't think there in anything in the upgrade.md file that suggests you can no longer natively serialize and, importantly, deserialize models. No examples exist describing how to do this using the SDK.

Take for example the Message model, in it's basic form you can serialise it, however as soon as you add an ItemBody element you can't because the backing store now contains a subscriber for changes to the ItemBody, which is implemented as a closure. This prevents the Message model from being serialised using native PHP serialize/unserialize methods.

My usage case is that I need to offload the sending of messages to a background task. The messages are created when forms are submitted etc. and saved to a scheduler list which picks them up via a command line background task, and then performs the actual sending of the Message object.

There are already issues that hint towards this problem but not to the actual cause of the error:
https://github.com/microsoftgraph/msgraph-sdk-php/issues/1471
https://github.com/microsoftgraph/msgraph-sdk-php/issues/1470
https://github.com/microsoftgraph/msgraph-sdk-php/issues/1452

Expected behavior

Native serialize and unserialize methods should work with all SDK models.

How to reproduce

This simple code will crash when attempting to serialise the Message object:

    $message = new Message();
    $message->setSubject('Test');
    $body = new ItemBody();
    $body->setContentType(new BodyType(BodyType::HTML));
    $body->setContent('<p>Test</p>');
    $message->setBody($body); // Causes a subscription to be set on ItemBody
    $test = serialize($message); // This would be stored for the background task.
SDK Version

v2.12.0

Latest version known to work for scenario above?

v1

Known Workarounds

None.

Debug output
Click to expand log object(Exception)#705 (7) { ["message":protected]=> string(41) "Serialization of 'Closure' is not allowed" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(64) "redacted.php" ["line":protected]=> int(220) ["trace":"Exception":private]=> array(5) { ... } ```
Configuration

No response

Other information

No response

Lingua principale
PHP
Stelle
669
Fork
150
Merge medio
15h 21m
PR unite (30g)
3

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoftgraph/msgraph-sdk-php

Tutte le issue di microsoftgraph/msgraph-sdk-php

Issue simili

Altre issue su PHP

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.