Allow JsonSerializerOptions parameters for user-defined and inputs and hardcode everything else to the source generator. (#182)

* Allow user-defined JsonSerializerOptions for user-defined and inputs and hardcode everything else to the source generator.

* Add validation for user-defined JsonSerializerOptions.

* Remove out of date comment.

* Address feedback and add tests
This commit is contained in:
Eirik Tsarpalis 2025-04-02 18:43:54 +01:00 • committed by GitHub
commit f1af251c32
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 632 additions and 372 deletions

View file

@ -289,7 +289,7 @@ public sealed class InMemoryTestSseServer : IAsyncDisposable
var jsonRpcResponse = new JsonRpcResponse()
{
Id = jsonRpcRequest.Id,
Result = new InitializeResult()
Result = JsonSerializer.SerializeToNode(new InitializeResult
{
ProtocolVersion = "2024-11-05",
Capabilities = new(),
@ -298,7 +298,7 @@ public sealed class InMemoryTestSseServer : IAsyncDisposable
Name = "ExampleServer",
Version = "1.0.0"
}
}
})
};
// Echo back to the HTTP response
@ -369,7 +369,7 @@ public sealed class InMemoryTestSseServer : IAsyncDisposable
{
JsonRpc = "2.0",
Method = "test/notification",
Params = new { message = content }
Params = JsonSerializer.SerializeToNode(new { message = content }),
};
var serialized = JsonSerializer.Serialize(notification);

View file

@ -1,7 +1,8 @@
using System.Threading.Channels;
using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Protocol.Transport;
using ModelContextProtocol.Protocol.Types;
using System.Text.Json;
using System.Threading.Channels;
namespace ModelContextProtocol.Tests.Utils;
@ -59,10 +60,10 @@ public class TestServerTransport : ITransport
await WriteMessageAsync(new JsonRpcResponse
{
Id = request.Id,
Result = new ModelContextProtocol.Protocol.Types.ListRootsResult
Result = JsonSerializer.SerializeToNode(new ListRootsResult
{
Roots = []
}
}),
}, cancellationToken);
}
@ -71,7 +72,7 @@ public class TestServerTransport : ITransport
await WriteMessageAsync(new JsonRpcResponse
{
Id = request.Id,
Result = new CreateMessageResult { Content = new(), Model = "model", Role = "role" }
Result = JsonSerializer.SerializeToNode(new CreateMessageResult { Content = new(), Model = "model", Role = "role" }),
}, cancellationToken);
}