首页 新闻 会员 周边 捐助

javascript的数组对象,C#有没有什么方法直接读取的?

0
悬赏园豆:20 [已解决问题] 解决于 2014-10-03 17:02

比如:

var ary = [[75,'亚洲','中国','China',2],[650,'欧洲','英国','ENGLAND',2]] 

上面是javascript的一个数组对象,并不是严格的json格式

C#有没有办法解析 [[75,'亚洲','中国','China',2],[650,'欧洲','英国','ENGLAND',2]] 

这个内容啊 原本是想用json格式定义类型转换的,但感觉不大可能。

犇牛牛的主页 犇牛牛 | 初学一级 | 园豆:31
提问于:2014-09-30 16:17
< >
分享
最佳答案
0

可以的,方法参数可以用Newtonsoft.dll中的JObject类型,或者用dymic类型

收获园豆:5
scotly | 初学一级 |园豆:4 | 2014-09-30 17:09
其他回答(3)
0
1.首先定义一个转换的类  
  public class ExtendModel
    {
        public string Id{ get; set; } //Id
        public string area{ get; set; } //地区
        public string country{ get; set; }  //国家中文
        public string countryen{ get; set; }  //国家英文
        public int sort { get; set; }   //排序         
    }

2.用的时候这么用

List<ExtendModel> _model= new List<ExtendModel>();

 _model= new JavaScriptSerializer().Deserialize<ExtendModel>(Json串儿);


试试吧!

收获园豆:5
大楚打码人 | 园豆:4313 (老鸟四级) | 2014-09-30 16:52

我自己研究出来了 我都说了我的数据没有属性名 也就是最精简的JSON格式

要用JOBJECT JARRAY就可以搞定了 也不复杂

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2014-10-03 17:01
0

一楼方式适合对象。思路基本上是对的。

先在js中江ary转换为JSON字符串,然后再扔到C#中构造一个实体反序列化。

收获园豆:5
幻天芒 | 园豆:37207 (高人七级) | 2014-09-30 16:55
0

当然可以,一楼已给出范例。

只是,这个范例不通用而已。

 

下面给你一个代码,应该能帮你解惑了:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<object> list1 = InitList(5, 4, new object[] { 1, 2, "aa", "cc", 'd' });
            StringBuilder builder1 = new StringBuilder();
            new JavaScriptSerializer().Serialize(list1, builder1);
            var list2 = new JavaScriptSerializer().Deserialize<List<object>>(builder1.ToString());
            StringBuilder builder2 = new StringBuilder();
            new JavaScriptSerializer().Serialize(list2, builder2);
            var list3 = new JavaScriptSerializer().Deserialize<List<object>>("[[75,'亚洲','中国','China',2],[650,'欧洲','英国','ENGLAND',2]] ");
            StringBuilder builder3 = new StringBuilder();
            new JavaScriptSerializer().Serialize(list3, builder3);
            Console.WriteLine(builder1);
            Console.WriteLine();
            Console.WriteLine(builder2);
            Console.WriteLine();
            Console.WriteLine(builder3);
        }

        private static List<Object> InitList(int maxLength, int maxDeep, object[] values)
        {
            if(maxLength == 0)
            {
                return null;
            }
            List<object> list = new List<object>();
            int deep;
            int length;
            var random = new Random();
            for (int i = 0; i < maxLength; i++)
            {
                deep = random.Next(maxDeep);
                if(deep > 0)
                {
                    length = random.Next(1, maxLength + 1);
                    list.Add(InitList(length, deep, values));
                }
                else
                {
                    list.Add(values[random.Next(values.Length * 10000) / 10 % values.Length]);
                }
            }
            return list;
        }
    }
}
收获园豆:5
519740105 | 园豆:5810 (大侠五级) | 2014-10-02 09:45

具体的,你可以再参考下内存数据,我因为不能上传图片,就略过了。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-02 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册