日期:2014-05-18  浏览次数:21426 次

Newtonsoft.Json怎么解析json?json字符的格式不是固定的,所以没法写一个对应的类
我上网查了一下,感觉都是先写一个相对应的类,然后直接序列化或反序列化成这个类。
但是我现在碰到的情况是,json字符的格式不是固定的,所以没法写一个对应的类。
请问有没有好解析xml相类似的解析方法?
谢谢!

------解决方案--------------------
Newtonsoft.Json.Linq.JObject
Newtonsoft.Json.Linq.JArray
------解决方案--------------------
我的做法是把Json的内容反序列化到一个自定义的字典类里,这个字典类需要标识为可序化(SerializableAttribute),并且提供了自定义序列化的行为,也就是实现了ISerializable接口,提供了一个专供反序列化使用的构造函数(protected MyClass(SerializationInfo info, StreamingContext context))。然后用System.Runtime.Serialization.Json.DataContractJsonSerializer来序列化和反序列化JSON文本。
------解决方案--------------------
C# code

var mJObj = JObject.Parse(json);
var mName = (JArray)mJObj["Result"];
            for(var i=0;i<mName.Count;i++)
            {
                var tmpObj = (JObject)mName[i];
                var tmpID = (string)tmpObj["Id"];
            }
            var mSize = (int)mJObj["size"];

------解决方案--------------------
探讨

我的做法是把Json的内容反序列化到一个自定义的字典类里,这个字典类需要标识为可序化(SerializableAttribute),并且提供了自定义序列化的行为,也就是实现了ISerializable接口,提供了一个专供反序列化使用的构造函数(protected MyClass(SerializationInfo info, StreamingContext context))。然后用Syste……

------解决方案--------------------

using System.Runtime.Serialization;
C# code
 
  public string Serialize<T>(T data)
          {
              using (var memoryStream = new MemoryStream())
              {
                 var serializer = new DataContractSerializer(typeof(T));
                  serializer.WriteObject(memoryStream, data);
                  memoryStream.Seek(0, SeekOrigin.Begin);
                 var reader = new StreamReader(memoryStream);
                 string content = reader.ReadToEnd();
                 return content;
              }
         }

         public T Deserialize<T>(string xml)
         {
              using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
              {
                  var serializer = new DataContractSerializer(typeof(T));
                  T theObject = (T)serializer.ReadObject(stream);
                  return theObject;
             }
          }

------解决方案--------------------
探讨
using System.Runtime.Serialization;
C# code

public string Serialize<T>(T data)
{
using (var memoryStream = new MemoryStream())
{
var serial……

------解决方案--------------------
探讨

我的做法是把Json的内容反序列化到一个自定义的字典类里,这个字典类需要标识为可序化(SerializableAttribute),并且提供了自定义序列化的行为,也就是实现了ISerializable接口,提供了一个专供反序列化使用的构造函数(protected MyClass(SerializationInfo info, StreamingContext context))。然后用Syste……