2015-06-24 2 views
4

Использование сериализатора JSI NewtonSoft и структуры данных стека. Порядок отменяется, когда я десериализую структуру. Сравнение чисел и ss.JSON десериализация с структурой стека отменяет порядок

Я делаю что-то неправильно здесь или есть какие-либо проблемы.

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 

class Example 
{ 
    public static void Main() 
    { 
     Stack<string> numbers = new Stack<string>(); 
     numbers.Push("one"); 
     numbers.Push("two"); 
     numbers.Push("three"); 
     numbers.Push("four"); 
     numbers.Push("five"); 

     string json = JsonConvert.SerializeObject(numbers.ToArray()); 

     // A stack can be enumerated without disturbing its contents. 
     foreach (string number in numbers) 
     { 
      Console.WriteLine(number); 
     } 

     Console.WriteLine("\nPopping '{0}'", numbers.Pop()); 
     Console.WriteLine("Peek at next item to destack: {0}", 
      numbers.Peek()); 
     Console.WriteLine("Popping '{0}'", numbers.Pop()); 

     Stack<string> ss = null; 
     if (json != null) 
     { 
      ss = JsonConvert.DeserializeObject<Stack<string>>(json); 
     } 

    } 
} 

ответ

0

Существует обходное решение, за счет чего требуется дополнительное время обработки. Deserialize в List, отмените его, а затем заполните стек.

List<string> ls = null; 
Stack<string> ss = null; 
if (json != null) 
{ 
    ls = JsonConvert.DeserializeObject<List<string>>(json); 
    ls.Reverse(); 
    ss = new Stack<string>(ls); 
} 
Смежные вопросы