Tôi gặp sự cố khi sử dụng PowerShell v3 khi chuyển đổi chuỗi JSON có kích thước trên 2MB. Giới hạn mặc định trong trình nối tiếp JSON được PowerShell sử dụng được đặt thành 2MB, giải thích lỗi này.ConvertFrom-Json max length
Tuy nhiên khi tôi deserialize đối tượng bằng cách sử dụng ConvertFrom-Json trên một tập nhỏ hơn (tôi nhận các đối tượng dữ liệu khác nhau với bộ sưu tập nội bộ nhỏ hơn và lớn hơn nhưng đó là những đối tượng tương tự) nó trả về đối tượng rất đẹp với tất cả các thuộc tính mà tôi có thể dễ dàng truy cập.
Để khắc phục những hạn chế của serializer Tôi cố gắng để deserialize dữ liệu bằng tay:
$jsser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$jsser.MaxJsonLength = $jsser.MaxJsonLength * 10
$jsser.RecursionLimit = 99
$outObject = $jsser.DeserializeObject($json)
Đối tượng trông khác nhau có vẻ như bộ sưu tập nội bộ không được deserialized và khi tôi cố gắng để thực hiện tính họ trả lại kết quả trống.
Câu hỏi của tôi:
Assumption là
ConvertFrom-Json
hiện một số phép thuật bổ sung hoặc bằng cách nào đó tạo ra một khuôn mẫu cho các đối tượng trước khi serialization. Bất kỳ ý tưởng làm thế nào để tái tạo nó?Đối tượng tôi nhận được luôn là
PSCustomObject
; nếu tôi nhận được các đối tượng tôi muốn thiết lập bởiConvertFrom-Json
là có anyway để sử dụng nó như là loại đối tượng trong JsonSerializer?
Có nhưng trong PowerShell tôi đang cố gắng tránh nhập.Net dlls Powershell có các đối tượng động riêng của nó được phổ biến với các thuộc tính khi đang di chuyển và nó hoạt động tốt với các tệp dưới 2MB. Tôi chỉ muốn ép nó hoạt động theo cùng cách với các tệp trên 2MB. – Jammes
Để có đầy đủ PowerShell, bạn có thể sử dụng XML. Tôi sử dụng nó trong các kịch bản PowerShell V2.0 của mình. Nó hỗ trợ jsons lớn, nhưng nó là một chút tiết để sử dụng. – JPBlanc
Nếu bạn nhìn vào câu hỏi ban đầu của tôi, tôi đã tìm thấy một cách để deserialize JSON lớn. Khi bạn khởi tạo trình tự tuần tự, bạn có thể thay đổi thuộc tính MaxJsonLength. Bạn sẽ phải sử dụng Invoke-WebRequest chứ không phải là Invoke-RestRequest và làm theo RawContent và tìm kiếm '{' đầu tiên và loại bỏ mọi thứ khỏi infront và bạn có một json sạch. Trên các đối tượng lớn, xml serialization này có thể mất phí. – Jammes