Tôi đang sử dụng RestSharp và sử dụng Json.NET để tuần tự hóa (xem here).Tôi làm cách nào để RestSharp sử dụng BSON?
Json.NET hỗ trợ BSON và vì một số yêu cầu của tôi có khối dữ liệu nhị phân khổng lồ, tôi nghĩ điều này sẽ làm tăng đáng kể ứng dụng của tôi. Tuy nhiên, theo như tôi có thể nói, RestSharp dường như không có bất kỳ hỗ trợ trong xây dựng cho BSON.
Việc sử dụng Json.NET được thực hiện như là một serializer tùy chỉnh cho RestSharp, và vì vậy trong nháy mắt đầu tiên có vẻ như nó sẽ có thể sửa đổi serializer tùy chỉnh để sử dụng BSON. Tuy nhiên, phương thức Serialize
của giao diện RestSharp.Serializers.ISerializer
trả lại một string
- tức là (tôi giả định) không phù hợp với BSON. Vì vậy, tôi giả định rằng sẽ có một số thay đổi quan trọng hơn đối với RestSharp để thực hiện thay đổi này.
Có ai đã tìm ra cách để thực hiện việc này không?
Cập nhật: Tôi nhìn vào nguồn RestSharp, và phát hiện ra rằng RestRequest.AddBody
phương pháp mà có đối tượng của tôi và serializes nó vào cơ thể yêu cầu cuối cùng gọi Request.AddParameter
(với các dữ liệu đối tượng tuần tự hóa và kiểu tham số RequestBody
).
Tôi nhận thấy rằng tôi có thể sắp xếp thứ tự đối tượng của mình vào BSON và sau đó gọi trực tiếp Request.AddParameter
- và thực sự tôi có thể. Tuy nhiên, khi RestSharp sau đó thực hiện các RestRequest
, nó không đưa nội dung nhị phân vào yêu cầu, bởi vì có những giả định nhúng khác về nội dung yêu cầu được mã hóa UTF-8.
Như vậy có vẻ như hack này sẽ không hoạt động - có sẽ cần phải có một số thay đổi được thực để RestSharp chính nó, và tôi không phải là người đàn ông cho công việc ...
Cập nhật 2: Tôi đã quyết định sử dụng trình gỡ rối để tìm ra bao nhiêu RestSharp mà tôi phải thay đổi để khắc phục vấn đề mã hóa cơ thể, vì vậy tôi đã hoán đổi phiên bản RestSharp NuGet và đưa dự án RestSharp vào trong giải pháp của mình. Và ... nó đã hoạt động.
Nó chỉ ra rằng đã có một sự thay đổi để RestSharp trong vài tháng qua mà chưa có trong phiên bản NuGet.
Vì vậy, bạn có thể hiện sử dụng AddParameter
và chuyển vào đối tượng đã mã hóa BSON và RestSharp sẽ gửi nó đến máy chủ mà không có khiếu nại.
Câu trả lời này đã giúp tôi rất nhiều, trong trường hợp bất kỳ ai nhận được ngoại lệ "Chuỗi chứa nhiều hơn tha n một phần tử "khi thêm trình xử lý, tôi đã sửa nó bằng cách thêm Trình xử lý trước khi thêm các Header mặc định vào cá thể RestClient – yvesmancera