Как десериализовать строку json в список объектов, тип которых я получаю во время выполнения? - PullRequest
1 голос
/ 31 октября 2011

Я хочу десериализовать строку json в список объектов, тип которых я получаю во время выполнения.

Например:

моя строка json [{"id":"1", "name":"test"},{"id":"2", "name":"test2"}], а тип, который я получаю "Types.type1, types.dll", поэтому мне нужно десериализовать его до List<type1>.Если я получу тип "Types.type2, types.dll", мне нужно десериализовать его до List<type2>

Как я могу это сделать?

1 Ответ

2 голосов
/ 31 октября 2011

Вы можете использовать DataContractJsonSerializer в System.Runtime.Serialization

public class Foo
{
    public string Bar { get; set; }
    public int Baaz { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Foo>));
        MemoryStream ms = new MemoryStream(
            Encoding.UTF8.GetBytes("[{\"Bar\":\"Bar\",\"Baaz\":2}]"));

        var list = (List<Foo>)serializer.ReadObject(ms);

        Console.WriteLine(list.Count);
    }
}

. Чтобы решить проблему с этим во время выполнения, используйте ниже:

Type.GetType("System.Collections.Generic.List`1[[TestDll.TestType, TestDll]]")
...