sách gpt4 ăn đã đi

Cách giải quyết vấn đề Khóa trong Từ điển là loại tùy chỉnh khi sử dụng System.Text.Json

In lại Tác giả: Tôi là chú chim nhỏ Thời gian cập nhật: 2022-12-16 14:31:56 39 4
mua khóa gpt4 giày nike

Khi sử dụng System.Text.Json để thực hiện các thao tác tuần tự hóa và giải tuần tự hóa JSON, chúng ta sẽ gặp một vấn đề: làm thế nào để xử lý vấn đề Key trong từ điển là loại tùy chỉnh.

Thông tin cơ bản

Ví dụ: chúng tôi có đoạn mã sau:

 
                          
                            //
                          
                          
                             Xác định loại tùy chỉnh
                          
                          
                            công cộng
                          
                          
                            lớp học
                          
                          
                             Kiểu tùy chỉnh {
    
                          
                          
                            công cộng
                          
                          
                            số nguyên
                          
                           Nhận dạng { 
                          
                            lấy
                          
                          ; 
                          
                            bộ
                          
                          
                            ; }

    
                          
                          
                            công cộng
                          
                          
                            sợi dây
                          
                           Tên { 
                          
                            lấy
                          
                          ; 
                          
                            bộ
                          
                          
                            ; }

    
                          
                          
                            //
                          
                          
                             Lấy khóa được biểu thị bằng một chuỗi
                          
                          
                            công cộng
                          
                          
                            sợi dây
                          
                           Chìa khóa => $
                          
                            "
                          
                          
                            {Id}_{Tên}
                          
                          
                            "
                          
                          
                            ; }


                          
                          
                            //
                          
                          
                             Xác định một đối tượng thuộc loại Từ điển
                          
                          
Từ điển
                            sợi dây
                          
                          > từ điển = 
                          
                            mới
                          
                           Từ điển
                            sợi dây
                          
                          >
                          
                            
{ { 
                          
                          
                            mới
                          
                           Kiểu tùy chỉnh { Id = 
                          
                            1
                          
                          , Tên = 
                          
                            "
                          
                          
                            một
                          
                          
                            "
                          
                           }, 
                          
                            "
                          
                          
                            một
                          
                          
                            "
                          
                          
                             }, { 
                          
                          
                            mới
                          
                           Kiểu tùy chỉnh { Id = 
                          
                            2
                          
                          , Tên = 
                          
                            "
                          
                          
                            hai
                          
                          
                            "
                          
                           }, 
                          
                            "
                          
                          
                            hai
                          
                          
                            "
                          
                          
                             } };


                          
                          
                            //
                          
                          
                             từ điển đăng nhiều kỳ
                          
                          
                            sợi dây
                          
                           json =
                          
                             JsonSerializer.Serialize(từ điển);


                          
                          
                            //
                          
                          
                             Giải mã hóa từ điển
                          
                          
Từ điển
                            sợi dây
                          
                          > dictionary2 = JsonSerializer.Deserialize<>
                            sợi dây
                          
                          >>(json);
                        

  。

Trong đoạn mã trên, chúng tôi xác định loại CustomType tùy chỉnh và sử dụng loại này làm loại Khóa của Từ điển.

Tiếp theo, chúng ta sử dụng phương thức JsonSerializer.Serialize để tuần tự hóa từ điển thành chuỗi JSON và phương thức JsonSerializer.Deserialize để giải tuần tự hóa chuỗi JSON thành một từ điển.

Tuy nhiên, trong đoạn code trên, chúng ta sẽ thấy rằng khi serialization từ điển, Key trong từ điển sẽ được serialize thành một đối tượng JSON thay vì chuỗi mà chúng ta mong muốn.

Tương tự, khi deserialize một chuỗi JSON, Key trong đối tượng JSON sẽ được deserialize thành đối tượng CustomType thay vì chuỗi mà chúng ta mong muốn.

Tại thời điểm này, chúng ta cần sử dụng trình chuyển đổi JSON tùy chỉnh để giải quyết vấn đề này.

ví dụ về mã

Đầu tiên, chúng tôi xác định loại CustomTypeConverter được kế thừa từ JsonConverter, loại này triển khai các phương thức Đọc, Viết, ReadAsPropertyName và WriteAsPropertyName:

 
                          
                            công cộng
                          
                          
                            lớp học
                          
                           CustomTypeConverter: JsonConverter
                          
                            
{
    
                          
                          
                            công cộng
                          
                          
                            ghi đè
                          
                           Đọc CustomType(
                          
                            tham khảo
                          
                          
                             Trình đọc Utf8JsonReader, Loại typeToConvert, tùy chọn JsonSerializerOptions) {
        
                          
                          
                            //
                          
                          
                             Hủy tuần tự hóa đối tượng
                          
                          
                            trở lại
                          
                           JsonSerializer.Deserialize(
                          
                            tham khảo
                          
                          
                             người đọc, tùy chọn); }

    
                          
                          
                            công cộng
                          
                          
                            ghi đè
                          
                          
                            vô hiệu
                          
                          
                             Write(Utf8JsonWriter writer, giá trị CustomType, tùy chọn JsonSerializerOptions) {
        
                          
                          
                            //
                          
                          
                             Đối tượng tuần tự hóa
                          
                          
                                    JsonSerializer.Serialize(người viết, giá trị, tùy chọn); }

    
                          
                          
                            công cộng
                          
                          
                            ghi đè
                          
                           Loại tùy chỉnh Đọc dưới dạng Tên Thuộc tính(
                          
                            tham khảo
                          
                          
                             Trình đọc Utf8JsonReader, Loại typeToConvert, tùy chọn JsonSerializerOptions) {
        
                          
                          
                            //
                          
                          
                             Đọc khóa như chuỗi
                          
                          
                            của chúng tôi
                          
                           chuỗiValue =
                          
                             reader. GetString();

        
                          
                          
                            //
                          
                          
                             Phân tích chuỗi thành CustomType
                          
                          
                            trở lại
                          
                          
                             Phân tích cú pháp CustomType(stringValue); }

    
                          
                          
                            công cộng
                          
                          
                            ghi đè
                          
                          
                            vô hiệu
                          
                          
                             WriteAsPropertyName(Utf8JsonWriter writer, giá trị CustomType, tùy chọn JsonSerializerOptions) {
        
                          
                          
                            //
                          
                          
                             Viết khóa dưới dạng chuỗi
                          
                          
                                    writer.WritePropertyName(giá trị.Khóa); }

    
                          
                          
                            riêng tư
                          
                           Phân tích CustomType(
                          
                            sợi dây
                          
                          
                             giá trị) {
        
                          
                          
                            //
                          
                          
                             Phân tích chuỗi thành CustomType
                          
                          
                            của chúng tôi
                          
                           parts = giá trị.Split(
                          
                            "
                          
                          
                            _
                          
                          
                            "
                          
                          
                            );
        
                          
                          
                            của chúng tôi
                          
                           định danh = 
                          
                            số nguyên
                          
                          .Parse(các phần[
                          
                            0
                          
                          
                            ]);
        
                          
                          
                            của chúng tôi
                          
                           tên = các bộ phận[
                          
                            1
                          
                          
                            ];

        
                          
                          
                            trở lại
                          
                          
                            mới
                          
                          
                             Kiểu tùy chỉnh { Id 
                          
                          =
                          
                             id, Tên 
                          
                          =
                          
                             tên }; } }
                          
                        

  。

Trong đoạn mã trên, chúng tôi sử dụng thuộc tính Key của loại CustomType làm Khóa của từ điển. Trong thao tác tuần tự hóa, thuộc tính Key được tuần tự hóa thành một chuỗi và trong thao tác deserialization, chuỗi được giải tuần tự hóa thành thuộc tính Key.

Tiếp theo, chúng tôi sử dụng trình chuyển đổi JSON tùy chỉnh này để tuần tự hóa và giải tuần tự hóa từ điển:

 
                          
                            //
                          
                          
                             Xác định loại tùy chỉnh
                          
                          
                            công cộng
                          
                          
                            lớp học
                          
                          
                             Kiểu tùy chỉnh {
    
                          
                          
                            công cộng
                          
                          
                            số nguyên
                          
                           Nhận dạng { 
                          
                            lấy
                          
                          ; 
                          
                            bộ
                          
                          
                            ; }

    
                          
                          
                            công cộng
                          
                          
                            sợi dây
                          
                           Tên { 
                          
                            lấy
                          
                          ; 
                          
                            bộ
                          
                          
                            ; }

    
                          
                          
                            //
                          
                          
                             Lấy khóa được biểu thị bằng một chuỗi
                          
                          
                            công cộng
                          
                          
                            sợi dây
                          
                           Chìa khóa => $
                          
                            "
                          
                          
                            {Id}_{Tên}
                          
                          
                            "
                          
                          
                            ; }


                          
                          
                            //
                          
                          
                             Xác định một đối tượng thuộc loại Từ điển
                          
                          
Từ điển
                            sợi dây
                          
                          > từ điển = 
                          
                            mới
                          
                           Từ điển
                            sợi dây
                          
                          >
                          
                            
{ { 
                          
                          
                            mới
                          
                           Kiểu tùy chỉnh { Id = 
                          
                            1
                          
                          , Tên = 
                          
                            "
                          
                          
                            một
                          
                          
                            "
                          
                           }, 
                          
                            "
                          
                          
                            một
                          
                          
                            "
                          
                          
                             }, { 
                          
                          
                            mới
                          
                           Kiểu tùy chỉnh { Id = 
                          
                            2
                          
                          , Tên = 
                          
                            "
                          
                          
                            hai
                          
                          
                            "
                          
                           }, 
                          
                            "
                          
                          
                            hai
                          
                          
                            "
                          
                          
                             } };


                          
                          
                            //
                          
                          
                             Tạo đối tượng JsonSerializerOptions
                          
                          
                            của chúng tôi
                          
                           tùy chọn = 
                          
                            mới
                          
                          
                             Tùy chọn JsonSerializer();


                          
                          
                            //
                          
                          
                             Thêm trình chuyển đổi JSON tùy chỉnh
                          
                          
                            tùy chọn. Bộ chuyển đổi. Thêm(
                          
                          
                            mới
                          
                          
                             Chuyển đổi loại tùy chỉnh());


                          
                          
                            //
                          
                          
                             từ điển đăng nhiều kỳ
                          
                          
                            sợi dây
                          
                           jsonChuỗi =
                          
                             JsonSerializer.Serialize(từ điển, tùy chọn);


                          
                          
                            //
                          
                          
                             Giải tuần tự hóa chuỗi JSON
                          
                          
                            của chúng tôi
                          
                           kết quả = JsonSerializer.Deserialize<>
                            sợi dây
                          
                          >>(jsonString, tùy chọn);
                        

  。

Trong đoạn mã trên, chúng tôi sử dụng thuộc tính Key của loại CustomType làm Khóa của từ điển. Trong thao tác tuần tự hóa, thuộc tính Key được tuần tự hóa thành một chuỗi và trong thao tác deserialization, chuỗi được giải tuần tự hóa thành thuộc tính Key.

Gợi ý sử dụng

Khi sử dụng System.Text.Json cho các hoạt động tuần tự hóa và giải tuần tự hóa, nếu muốn giải quyết vấn đề Khóa trong từ điển là loại tùy chỉnh, bạn có thể giải quyết bằng cách xác định trình chuyển đổi JSON tùy chỉnh.

Khi xác định trình chuyển đổi JSON tùy chỉnh, bạn cần chú ý đến các điểm sau:

  1. Loại cần kế thừa từ loại JsonConverter.
  2. Loại này cần triển khai các phương thức Đọc, Viết, ReadAsPropertyName và WriteAsPropertyName.
  3. Trong phương thức Read, chuỗi JSON cần được giải tuần tự hóa thành loại T.
  4. Trong phương thức Write, loại T cần được tuần tự hóa thành chuỗi JSON.
  5. Trong phương thức ReadAsPropertyName, chuỗi JSON cần được giải tuần tự hóa thành thuộc tính Key của từ điển.
  6. Trong phương thức WriteAsPropertyName, thuộc tính Key của từ điển cần được tuần tự hóa thành chuỗi JSON.

Tóm tắt

Thông qua một ví dụ, bài viết này giới thiệu cách sử dụng System.Text.Json để thực hiện các thao tác tuần tự hóa và giải tuần tự hóa nhằm giải quyết vấn đề Khóa trong từ điển là loại tùy chỉnh.

Khi xác định trình chuyển đổi JSON tùy chỉnh, bạn cần lưu ý rằng loại này cần kế thừa từ loại JsonConverter và triển khai các phương thức Read, Write, ReadAsPropertyName và WriteAsPropertyName.

Tài liệu tham khảo

  • Hệ thống.Text.Json
  • Cách tuần tự hóa và hủy tuần tự hóa một từ điển với kiểu khóa tùy chỉnh

Bài viết này được xây dựng bằng cách sử dụng tính năng phun nước hỗ trợ Chat OpenAI. Nếu có điểm tương đồng thì hoàn toàn có thể.

  • Tác giả bài viết này: newbe36524
  • Link bài viết này: https://www.newbe.pro/ChatAI/How-serialize-custom-type-as-dictionary-key-in-system-text-json/
  • Tuyên bố về Bản quyền: Trừ khi có quy định khác, tất cả các bài viết trên blog này đều áp dụng  BY-NC-SA  Thỏa thuận cấp phép. Vui lòng ghi rõ nguồn khi tái bản!

Cuối cùng, bài viết này về cách xử lý vấn đề Key trong Từ điển là loại tùy chỉnh khi sử dụng System.Text.Json ở đây. Nếu bạn muốn biết thêm về cách xử lý vấn đề sử dụng Từ điển khi sử dụng System. Text.Json Đối với các câu hỏi có khóa là loại tùy chỉnh, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

39 4 0
tôi là một con chim nhỏ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress