XMLファイルのデシリアライズに取り組んでいます。それは私が代わりに\DateTime
オブジェクトのnull
オブジェクトに、次のXML要素(OfferDate
)をデシリアライズしようとしているので、いくつかの要素がどのようなデータが含まれないことがあります:JMSSerializer:空のDateTime XML要素をPHP "null"オブジェクトにデシリアライズ
<Product>
<OfferDate></OfferDate>
</Product>
...しかし、私は取得しています次のエラー:
JMS\Serializer\Exception\RuntimeException: Invalid datetime "", expected format Y-m-d\TH:i:s.
./vendor/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php:117
./vendor/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php:99
./vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:180
./vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php:280
./vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:236
./vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php:175
./vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:130
./vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php:251
./vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:236
./vendor/jms/serializer/src/JMS/Serializer/Serializer.php:182
./vendor/jms/serializer/src/JMS/Serializer/Serializer.php:116
./vendor/phpoption/phpoption/src/PhpOption/Some.php:89
./vendor/jms/serializer/src/JMS/Serializer/Serializer.php:119
./tests/AppBundle/Domain/Model/ProductTest.php:35
./tests/AppBundle/Domain/Model/ProductTest.php:44
いくつかのデータがあるので、XMLファイルは、それが働くだろうOfferDate
例2016-09-25T18:58:55
のために含まれます場合は...しかし、それは私が持っているすべてのデータのない要素があり得ることも可能ですので、この場合も同様です。で上見られるように
$xml = file_get_contents(__DIR__.'/product.xml');
$serializer = SerializerBuilder::create()
->addMetadataDir(__DIR__.'/../../../../app/config/serializer')
->build();
/** @var ProductCollection $productCollection */
$productCollection = $serializer->deserialize($xml, ProductCollection::class, 'xml');
$firstProduct = $productCollection->getProducts()[0];
var_dump($firstProduct->getOfferDate());
./tests/AppBundle/Domain/Model/ProductTest.php:35
:
AppBundle\Domain\Model\Product:
xml_root_name: Product
properties:
offerDate:
serialized_name: OfferDate
type: DateTime<'Y-m-d\TH:i:s'>
マイProduct
クラス:
そして最後に、私の直列化復元オブジェクトにXMLをデシリアライズする
マイYMLマッピングエラーは、$productCollection = $serializer->deserialize($xml, ProductCollection::class, 'xml');
の行に相当します。 null
オブジェクトに任意のデータなし
To clarify why I deserialize into a
ProductCollection
: Theproduct.xml
contains a<Products>
element in which<Product>
elements are. TheProductCollection
then contains a method calledgetProducts()
which returns an array containing the deserializedProduct
objects.
OfferDate
要素をデシリアライズする方法はあり