microsoft/kiota-serialization-text
Text/plain serialization/deserialization library for PHP projects generated with Microsoft Kiota. Adds support for handling plain text request/response bodies as a Kiota serialization implementation; install via composer (microsoft/kiota-serialization-text).
Installation:
composer require microsoft/kiota-serialization-text
Add to composer.json if preferred:
"require": {
"microsoft/kiota-serialization-text": "^2.0.2"
}
First Use Case:
use Microsoft\Kiota\Serialization\Text\TextSerializer;
$serializer = new TextSerializer();
$client = new YourKiotaClient($serializer);
Where to Look First:
src/TextSerializer.php for core logic (e.g., serializeObject(), deserializeObject()).tests/ for examples of text/plain serialization/deserialization (e.g., handling raw strings, line breaks).Serialization:
$response = $client->get('/api/data');
$plainTextData = $response->parseContent(); // Returns string
Deserialization:
text/plain into structured objects (if your model supports it).$serializer = new TextSerializer();
$object = $serializer->deserializeObject(
'key1:value1\nkey2:value2',
YourModel::class
);
Integration with Kiota Clients:
$requestInfo = new RequestInformation();
$requestInfo->setBody('plain text content');
$requestInfo->setContentType('text/plain');
$response = $client->request($requestInfo);
$textContent = $response->getBody();
Custom Model Support:
TextSerializer to handle custom formats (e.g., CSV-to-array):
class CustomTextSerializer extends TextSerializer {
public function deserializeObject(string $serializedObject, string $type): object {
if ($type === CustomModel::class) {
return $this->csvToModel($serializedObject);
}
return parent::deserializeObject($serializedObject, $type);
}
}
Content-Type: text/plain for requests/responses.No Automatic Parsing:
text/plain requires manual parsing logic. Example:
// ❌ Fails silently:
$serializer->deserializeObject('raw text', YourModel::class);
// ✅ Workaround: Pre-process text into a known format (e.g., JSON string).
Line Endings:
\n vs \r\n) may break deserialization. Normalize with:
$normalizedText = str_replace(["\r\n", "\r"], "\n", $rawText);
Kiota Client Generation:
contentType: text/plain for relevant endpoints. Otherwise, the client may default to JSON.Circular References:
@ignore annotations:
#[IgnoreProperty]
public ?Self $selfReference;
$response = $client->request($requestInfo);
file_put_contents('debug.txt', $response->getBody());
serializeObject() to debug object-to-text conversion:
$text = $serializer->serializeObject($yourObject);
var_dump($text); // Check for expected format
\n, \t), or Unicode may require custom handling.Custom Serializers:
TextSerializer to support domain-specific formats (e.g., Markdown, INI):
class MarkdownSerializer extends TextSerializer {
public function deserializeObject(string $serializedObject, string $type): object {
// Parse Markdown to your model
}
}
Middleware:
$client->addRequestMiddleware(function ($requestInfo) {
$requestInfo->setBody(gzip_compress($requestInfo->getBody()));
});
Kiota Abstractions:
SerializationContext to dynamically switch serializers:
$context = new SerializationContext();
$context->setSerializer(new TextSerializer());
$client->setRequestAdapter(new RequestAdapter($context));
$serializer = new TextSerializer([
'delimiter' => '|', // Customize for your use case
]);
text/plain support). Check kiota-php releases.How can I help you explore Laravel packages today?