Tôi hiện đang làm việc trên một chứng minh-of-khái niệm và chạy vào một vấn đề liên quan đến việc sử dụng JSON để serialize một HttpRequest.Serializing một đối tượng yêu cầu bằng cách sử dụng JSON
nền
Tôi ban đầu nghĩ rằng tôi sẽ có thể dễ dàng thực hiện nó bằng cách sử dụng phương pháp JSON.Encode() như bên dưới:
JSON.Encode(HttpContext.Request)
Tuy nhiên, tôi nhanh chóng phát hiện ra rằng điều này gây ra tất cả các loại hình tròn tài liệu tham khảo được ném (chủ yếu là do cấu trúc thực tế và độ phức tạp của đối tượng Yêu cầu). Điều này chỉ xảy ra khi thực sự gặp phải các thuộc tính có chứa tham chiếu vòng tròn, vì trước đây tôi đã sử dụng mã sau để chỉ lấy các phần tử cụ thể mà tôi cần:
JSON.Encode(new {HttpContext.Request.Cookies,HttpContext.Request.Headers, ... });
.
Tôi chỉ tò mò nếu có phương pháp xử lý tốt hơn (hoặc phương pháp xử lý tốt nhất có thể là). Tôi sẽ trình bày chi tiết một vài cách tiếp cận mà tôi đã thực hiện cho đến nay dưới đây để có thể tìm thấy bất kỳ khu vực nào mà tôi có thể đã đi sai.
trước pháp tiếp cận
Sử dụng Reflection để lặp qua từng khách sạn thuộc Yêu cầu và cố gắng xây dựng một chuỗi JSON "bất động sản-by-bất động sản". (này thất bại khi gặp phải một hình tròn tham khảo)
Cố gắng để lưu trữ mỗi Properties trong một đối tượng từ điển và sau đó sử dụng JSON để serialize toàn bộ từ điển (với hy vọng rằng nó sẽ "san bằng" đối tượng ra và làm cho nó dễ dàng hơn để serialize)
Sử dụng JSON.NET library và cố gắng để serialize nó thông qua các phương pháp (JsonConvert.SerializeObject() tôi đã cố gắng để vượt qua trong một vài cài đặt thêm để tránh một tham chiếu vòng tròn, nhưng có không có bất kỳ may mắn nào)
cách tiếp cận mới nhất của tôi (sử dụng thư viện JSON.NET) Tôi nghĩ sẽ đến gần làm việc, tuy nhiên tôi gặp phải một lỗi mà liên quan đến một "Timeout" tài sản trên Suối đối tượng trong phạm vi yêu cầu.
Tôi không phản đối đơn giản là tránh tuần tự hóa các đối tượng Stream và Tham khảo thông tư. Tôi chỉ cố gắng lấy càng nhiều đối tượng Yêu cầu càng tốt trong khi tránh bất kỳ loại rủi ro nào trong số này.
Cảm ơn gợi ý Malcolm. Tôi đã thử sử dụng nó một vài cách khác nhau kể từ khi đọc đề xuất của bạn và áp dụng một số cài đặt nhưng tôi vẫn gặp sự cố có vẻ (chủ yếu liên quan đến Luồng?) "Luồng không được hỗ trợ trên luồng này". Ý tưởng nào? –
Điều đó khiến tôi nghĩ rằng bạn không thể JSON Chuyển đổi một đối tượng có Thuộc tính luồng. –
Tôi cũng bắt đầu nghiêng về hướng đó. Nó dường như gây ra một thời gian chờ khi serializing một dòng và sau đó nó kết quả đầu ra đã đề cập trước đó. Tôi cho rằng tôi sẽ phải tìm ra một cách để bỏ qua các Tham chiếu Streams/Circular. –