2015-06-22 17 views
5

Tôi mới trong phát triển C#,C# - JSON serialization của từ điển

Trong dự án của tôi, tôi cố gắng tiết kiệm một trường hợp Dictionary bởi serializing nó thành một lưu trữ Settings với mã này:

private static Dictionary<string, Dictionary<int, string>> GetKeys() 
{ 
    Dictionary<string, Dictionary<int, string>> keys = null; 
    try { 
     JavaScriptSerializer ser = new JavaScriptSerializer(); 
     keys = ser.Deserialize<Dictionary<string, Dictionary<int, string>>>(Settings.Default.keys); 
    } 
    catch (Exception e) 
    { 
     Debug.Print(e.Message); 
    } 
    return keys; 
} 

private static void SetKeys(Dictionary<string, Dictionary<int, string>> keys) 
{ 
    try 
    { 
     JavaScriptSerializer ser = new JavaScriptSerializer(); 
     Settings.Default.keys = ser.Serialize(keys); 
    } 
    catch (Exception e) 
    { 
     Debug.Print(e.Message); 
    } 
} 

My vấn đề xảy ra khi tôi cố gắng gọi phương thức SetKeys. Một ThreadAbortException được ném:

Một ngoại lệ cơ hội đầu tiên của loại 'System.Threading.ThreadAbortException' xảy ra ở mscorlib.dll đánh giá đòi hỏi một thread để chạy tạm. Sử dụng cửa sổ Xem để thực hiện đánh giá.

Bạn có ý tưởng làm cách nào để giải quyết lỗi của mình?

Cảm ơn

+3

Bạn có thể muốn xem xét điều này http : //stackoverflow.com/a/13754871/1099945 – gyosifov

+1

Nối tiếp/deserializ ing từ điển luôn luôn là một nguồn vấn đề. Tôi khuyên bạn nên bỏ từ điển và tạo bộ sưu tập cấu hình của riêng bạn mở rộng https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx vì đây là bộ sưu tập có khóa cũng là Bộ sưu tập , dễ dàng được tuần tự hóa/deserialized. – Will

Trả lời

3

Better sử dụng Json.NET, nhưng nếu bạn muốn sử dụng JavaScriptSerializer:

Hãy thử:

var json = new JavaScriptSerializer().Serialize(keys.ToDictionary(item => item.Key.ToString(), item => item.Value.ToString())); 

Hoặc:

string jsonString = serializer.Serialize((object)keys); 
+1

Json.NET đã giải quyết được sự cố của tôi. Cảm ơn sự giúp đỡ của bạn! – alex