Một số loại tùy chỉnh triển khai IEnumerable không nhất thiết phải có bộ sưu tập sao lưu. Chúng có thể được tạo động, ví dụ như sử dụng 'yield' hoặc LINQ. Dưới đây là một ví dụ:Làm cách nào để bỏ qua chuỗi tuần tự hóa JavaScript mặc định cho các loại IEnumerable trong Json.Net?
public class SOJsonExample
{
public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
{
public List<int> Keys { get; set; }
public List<float> Values { get; set; }
public MyCustomEnumerable()
{
Keys = new List<int> { 1, 2, 3 };
Values = new List<float> { 0.1f, 0.2f, 0.3f };
}
public IEnumerator<KeyValuePair<int, float>> GetEnumerator()
{
var kvps =
from key in Keys
from value in Values
select new KeyValuePair<int, float>(key, value);
return kvps.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
Tôi đã phát hiện ra rằng serialization mặc định bằng cách Json.NET là để liệt kê mỗi giá trị và lưu trữ các giá trị trong một mảng JavaScript (mà tôi không muốn). Trình deserializer mặc định sẽ không deserialize bộ sưu tập vì nó không thể được điền. Trong những trường hợp này, thay vào đó, tôi muốn Json.NET bỏ qua chuỗi tuần tự hóa JavaScript mặc định và chỉ lưu trữ các thành viên của lớp đó.
Tất cả những gì tôi muốn là khóa và giá trị của mình - có cách tắt nào để thực hiện việc này hay tôi phải triển khai trình tự sắp xếp tùy chỉnh của riêng mình không?
Đã kiểm tra this và this, không phải chính xác câu hỏi của tôi. Quét the documentation là tốt, nhưng không tìm thấy những gì tôi đang tìm kiếm (có lẽ tôi đã tìm nhầm chỗ).
(Chỉnh sửa # 1 - cải thiện rõ nét)
(Chỉnh sửa # 2 - đã trả lời câu hỏi của riêng tôi ... xem dưới đây)
Trang này có giới thiệu cho 'JsonObject' và các thuộc tính khác. http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm – kmc059000