关于JSON.net的JavaScriptConvert.SerializeObject方法

silentwins 2008-11-24 05:05:10
本人用JSON.net 1.3.1序列化一个对象,例如把Northwind数据库的表明全部搜索出来:

string dbDtr = string.Format("server={0};database={1};uid={2};pwd={3}", "localhost", "Northwind", "sa", "xxxxxx");
string param = Convert.ToString(Request["param"]);

Access.connstring = Convert.ToString(dbDtr);
string sql = String.Format("select [Name] from {0}..sysobjects WHERE [type] IN (N'U')", "Northwind");
DataSet ds = Access.GetDataSet(sql);
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
List<Hashtable> testList = new List<Hashtable>();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
Hashtable ht = new Hashtable();
DataRow row = ds.Tables[0].Rows[i] as DataRow;
ht["TableName"] = Convert.ToString(row["Name"]);
testList.Add(ht);
}
string json = JavaScriptConvert.SerializeObject(testList);
Response.Write(json);
}


得出来的字符串是:
[{"TableName":"Orders"},{"TableName":"Products"},{"TableName":"Order Details"},{"TableName":"CustomerCustomerDemo"},{"TableName":"CustomerDemographics"},{"TableName":"Region"},{"TableName":"Territories"},{"TableName":"EmployeeTerritories"},{"TableName":"dtproperties"},{"TableName":"Employees"},{"TableName":"Categories"},{"TableName":"Customers"},{"TableName":"Shippers"},{"TableName":"Suppliers"}] 


大家看到这里是没有根元素testList的。
但是别人用高版本的JSON.net的出来的字符串却是有根元素的,例如:

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";

List<Post> posts = new List<Post>()
{
new Post{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee" },
new Post{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee" },
new Post{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee" },
new Post{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee" },
new Post{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee" },
new Post{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee" }
};

Blog blog = new Blog();
blog.Posts = posts;

context.Response.Write(JavaScriptConvert.SerializeObject(blog));
}


出来的字符串是这样有Posts根元素的:


是版本之间的区别么,还是我处理不当?我其实想要后面那个结果~~
为什么两个版本出来的结果会不一样,是不是升级期间JSON的标准发生变化了?
...全文
3725 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenggezhuang 2010-12-30
  • 打赏
  • 举报
回复
请问JavaScriptConvert.SerializeObject()方法怎么写呢?还希望帮个忙!
Crazy旭日东升 2010-07-06
  • 打赏
  • 举报
回复
hfsssffdfdf dfsdfgdfg dgsdg dg rtyswrt
silentwins 2008-11-25
  • 打赏
  • 举报
回复
To lonely7345:

经验证,你说的是对的,不过就是要多写一个类去转换感觉有点别扭~~
衷心感谢!!!帖子晾一下就会结掉~~
a12321321321312321 2008-11-24
  • 打赏
  • 举报
回复
顶一下,表示支持.楼主很强大,向楼主学习。
qq2013 2008-11-24
  • 打赏
  • 举报
回复
ding
关注 帮顶下
曾默 2008-11-24
  • 打赏
  • 举报
回复
关注 帮顶下
mjjzg 2008-11-24
  • 打赏
  • 举报
回复
没搞过这个,顶一下,表示支持
孤独侠客123 2008-11-24
  • 打赏
  • 举报
回复
不是版本的问题,而且两个版本的解析方式也是正确的,一样的.

第二个的方式的话,Blog是一个实体,而Posts只是其中的一个属性,所以其实序列化后也是显示出来{属性名:属性值}这样,只不过他的属性是一个集合类型.

而你的第一个,就是一个集合,所以不会有前面的属性名.而是一个实体的集合.你如果想实现第二个的话,也就可以再写一个实体.

public class Blog{
public IList Posts;
}

Blog.Posts = testList;

这样再去序列化Blog就对了.

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧