首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在C#中如何解析JSON数据,并获取到其中的值

2013-03-19 
在C#中怎么解析JSON数据,并获取到其中的值?在C#中怎么解析JSON数据,并获取到其中的值?比如JSON数据为:{ph

在C#中怎么解析JSON数据,并获取到其中的值?
在C#中怎么解析JSON数据,并获取到其中的值?
比如JSON数据为:{"phantom":true,"id":"ext-record-10","data":{"MID":1019,"Name":"aaccccc","Des":"cc","Disable":"启用","Remark":"cccc"}}。
我想得到结果为{"MID":1019,"Name":"aaccccc","Des":"cc","Disable":"启用","Remark":"cccc"}的字符串。
[解决办法]
下面的内容没有验证过,仅供参考

I don't know about JSON.NET, but it works fine with JavaScriptSerializer from System.Web.Extensions.dll (.NET 3.5 SP1):

using System.Collections.Generic; 
using System.Web.Script.Serialization; 
public class NameTypePair 

    public string OBJECT_NAME { get; set; } 
    public string OBJECT_TYPE { get; set; } 

public enum PositionType { none, point } 
public class Ref 

    public int id { get; set; } 

public class SubObject 

    public NameTypePair attributes { get; set; } 
    public Position position { get; set; } 

public class Position 

    public int x { get; set; } 
    public int y { get; set; } 

public class Foo 

    public Foo() { objects = new List<SubObject>(); } 
    public string displayFieldName { get; set; } 
    public NameTypePair fieldAliases { get; set; } 
    public PositionType positionType { get; set; } 
    public Ref reference { get; set; } 
    public List<SubObject> objects { get; set; } 

static class Program 

 
    const string json = @"{ 
  ""displayFieldName"" : ""OBJECT_NAME"",  
  ""fieldAliases"" : { 
    ""OBJECT_NAME"" : ""OBJECT_NAME"",  
    ""OBJECT_TYPE"" : ""OBJECT_TYPE"" 
  },  
  ""positionType"" : ""point"",  
  ""reference"" : { 
    ""id"" : 1111 
  },  
  ""objects"" : [ 
    { 
      ""attributes"" : { 
        ""OBJECT_NAME"" : ""test name"",  
        ""OBJECT_TYPE"" : ""test type"" 
      },  
      ""position"" :  
      { 
        ""x"" : 5,  
        ""y"" : 7 
      } 
    } 


  ] 
}"; 
 
 
    static void Main() 
    { 
        JavaScriptSerializer ser = new JavaScriptSerializer(); 
        Foo foo = ser.Deserialize<Foo>(json); 
    } 
 
 


[解决办法]
该回复于2012-12-20 09:37:42被管理员删除
[解决办法]
新版,需要引用System.ServiceModel.Web.dll



using System.Runtime.Serialization.Json;
       [Serializable]
        public class InternalClass
        {
            public int MID;
            public string Name;
            public string Des;
            public string Disable;
            public string Remark;
        }

        [Serializable]
        public class OuterClass
        {
            public bool phantom;
            public string id;

            public InternalClass data;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            const string json = @"{""phantom"":true,
                                   ""id"":""ext-record-10"",
                                   ""data"":
                                  {""MID"":1019,
                                   ""Name"":""aaccccc"",
                                    ""Des"":""cc"",
                                    ""Disable"":""启用"",


                                    ""Remark"":""cccc""}}";
            DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(OuterClass));
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                OuterClass foo1 = ser1.ReadObject(ms) as OuterClass;
            }

        }


[解决办法]
这个也结了吧:)

可以使用serialization得到,但是我觉得那最好还是用字符串函数来做性能好一点 serialization和desiralization比较慢。

const string json = @"{""phantom"":true,
  ""id"":""ext-record-10"",
  ""data"":
  {""MID"":1019,
  ""Name"":""aaccccc"",
  ""Des"":""cc"",
  ""Disable"":""启用"",
  ""Remark"":""cccc""}}";

int posBegin = json.IndexOf(’{', 0);
posBegin = json.Indexof('{', posBegin);
int posEnd = json.IndexOf('}', posBegin);
string substr = json.SubString(posBegin, posEnd - posBegin +1);

代码没有经过测试,可能有小问题,仅供参考。 

热点排行