如何使用C#解码JSON字符串?

The*_*ask 8 .net c# json javascriptserializer

我正在寻找一个示例代码/ lib来使用C#解码JSON字符串.

编码我可以这样做:

var data = new Dictionary<string,string>(); 
data.Add("..", "..."); 
var json_encoded = new JavaScriptSerializer().Serialize(data); 
Run Code Online (Sandbox Code Playgroud)

但我怎么解码?

var json_decoded = ?? 
Run Code Online (Sandbox Code Playgroud)

Kak*_*shi 11

你可以这样做:

var data = new Dictionary<string, string>();
data.Add("foo", "baa"); 

JavaScriptSerializer ser = new JavaScriptSerializer();
var JSONString = ser.Serialize(data); //JSON encoded

var JSONObj = ser.Deserialize<Dictionary<string, string>>(JSONString); //JSON decoded
Console.Write(JSONObj["foo"]); //prints: baa
Run Code Online (Sandbox Code Playgroud)

  • 应该注意,这不会将JSON字符串反序列化回Type,在某些情况下可能没问题.我发现将字符串反序列化为Type是一个更强大的解决方案. (3认同)

The*_*Man 9

这将采用JSON并将其转换为您指定的强类型类(T)

public static T Deserialize<T>(string json)
        {
            var obj = Activator.CreateInstance<T>();
            using(var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                var serializer = new DataContractJsonSerializer(obj.GetType());
                obj = (T) serializer.ReadObject(ms);
                return obj;
            }
        }
Run Code Online (Sandbox Code Playgroud)

这将采用一个类并将其序列化为JSON

    public static string Serialize<T>(T obj)
    {
        var serializer = new DataContractJsonSerializer(obj.GetType());
        using (var ms = new MemoryStream())
        {
            serializer.WriteObject(ms, obj);
            return Encoding.Default.GetString(ms.ToArray());
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:在第一个示例中,您将需要一个支持类来指定类型T.因此,如果您告诉它T类型,User您需要在某处指定:

public class User
    {
        public string Username { get; set; }
        public string Firstname { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

  • 也许值得构造一个DataContractJsonSerializer对象(每个可序列化类型)而不是为每个序列化构造一个新对象? (2认同)