我知道ScriptIgnoreAttribute.
但是,如果我想根据标准忽略属性,该怎么办?例如,如果序列化的nullable属性为null并且不包含任何值,那么如何忽略它?
我使用jQuery的$ .ajax()函数向客户端发送了大量数据.我正在ASP.NET Web服务中调用一个返回JSON数据的方法.对于大多数搜索来说,一切都很棒,但是当我有一个大型数据集要返回时,我遇到了JavaScriptSerializer MaxJsonLength属性的问题.处理此问题的最佳做法是什么?我不想随意设置最大长度.如果返回的数据大于当前最大值,或者我应该重新写入并向客户端发送数据,我可以在Web服务中设置MaxJsonLength吗?
以下是来自Web服务的相关代码段:
Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>();
//add some data to the dictionary...
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);
Run Code Online (Sandbox Code Playgroud) 我怎样才能在C#现代UI中做到这一点?
var url = "http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml&v=1.0";
var wc = new WebClient();
var rawFeedData = wc.DownloadString(url);
//You can use System.Web.Script.Serialization if you don't want to use Json.NET
JavaScriptSerializer ser = new JavaScriptSerializer();
FeedApiResult foo = ser.Deserialize<FeedApiResult>(rawFeedData);
//Json.NET also return you the same strong typed object
var apiResult = JsonConvert.DeserializeObject<FeedApiResult>(rawFeedData);
Run Code Online (Sandbox Code Playgroud)
它给我在WebClient和错误中的错误 System.Web.Script.Serialization
我是C#和.NET的新手,但我已经使这段代码调用存储过程,然后我想获取返回的DataTable并将其转换为JSON.
SqlConnection con = new SqlConnection("connection string here");
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("getDates", con);
SqlParameter par = new SqlParameter("@PlaceID", SqlDbType.Int);
par.Value = 42;
da.SelectCommand = cmd;
cmd.Parameters.Add(par);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
con.Open();
try{
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(ds);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,最好/最简单的方法是什么?一个例子会很棒,因为我还是很陌生.
我的数据库中有一个数据表,我存储了各种设置.由于它们是任何类型(甚至是复杂的对象图),我决定将它们的值存储为序列化的JSON字符串.
让我们说我序列化了一个List<ItemBase>.序列化字符串看起来很好.但问题是列表项具有从中继承的各种类型ItemBase(对于我所关心的内容,这也可能是抽象的).
我应该使用哪个(de)序列化类/库,以便正确地反序列化我的JSON字符串以纠正对象实例.
.net json strong-typing javascriptserializer deserialization
我在尝试实现JavaScriptSerializer解析从服务器接收的JSON字符串时遇到问题.
我实现了以下代码:
responseFromServer = readStream.ReadLine();
JavaScriptSerializer ser = new JavaScriptSerializer();
var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(responseFromServer);
var status = dict["notificationType"];
Debug.WriteLine(status);
Run Code Online (Sandbox Code Playgroud)
我补充道 using System.Web.Script.Serialization;
Visual C#2010 Express告诉我命名空间Script中不存在命名空间名称System.Web.结果JavaScriptSerializer是无效的.
我错过了使用它,还是有更好的方法来解析JSON字符串?
我有这个C#对象:
var obj = new {
username = "andrey",
callback = "function(self) { return function() {self.doSomething()} (this) }"
}
Run Code Online (Sandbox Code Playgroud)
我需要JSON序列化它以在ajax调用中传递给浏览器.我使用JavascriptSerializer,但它序列化为以下JSON:
{"username":"andrey", "callback": "function(self) { return function() {self.doSomething()} (this) }"}
Run Code Online (Sandbox Code Playgroud)
但我需要的是:
{"username":"andrey", "callback": function(self) { return function() {self.doSomething()} (this) }}
Run Code Online (Sandbox Code Playgroud)
现在,当JSON对象到达浏览器并创建时,'callback'参数不是函数而是字符串.任何想法如何解决它,最好是在服务器端?
我们的客户希望在浏览器中显示日期和时间值,就像它们在数据库中一样,我们将它们作为UTC存储在数据库中.
起初我们在序列化和Javascript方面遇到了一些问题.DateTime值被移动了两次 - 首先匹配机器的本地时区,然后匹配浏览器中的时区.我们通过向JavaScriptSerializer添加自定义转换器来修复它.我们在Serialize覆盖中将DateTime标记为DateTimeKind.Utc.从Serialize中提取数据有点困难,但是我们发现了一些Uri hack,这有助于在相同的JavaScriptSerializer/Date(286769410010)/格式中返回DateTime值,但没有转移到本地时间.在Javascript方面,我们修补了KendoUI JS库来偏移构造的Date()对象,使它们看起来好像是UTC.
然后我们开始在另一方面工作,反序列化.同样,我们必须调整我们的代码以使用自定义stringify而不是JSON.stringify,这会在从本地时间转换为UTC时再次抵消数据.到目前为止,一切似乎都很好.
但看看这个测试:
public void DeserialiseDatesTest()
{
var dateExpected = new DateTime(1979, 2, 2,
2, 10, 10, 10, DateTimeKind.Utc);
// this how the Dates look like after serializing
// anothe issue, unrelated to the core problem, is that the "\" might get stripped out when dates come back from the browser
// so I have to add missing "\" or else Deserialize will break
string s = "\"\\/Date(286769410010)\\/\"";
// this get deserialized to UTC date …Run Code Online (Sandbox Code Playgroud) 我有以下方法:
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;
using Newtonsoft.Json;
using System.Collections;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
// [System.Web.Script.Services.ScriptService]
public class Tripadvisor : System.Web.Services.WebService {
public Tripadvisor () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HotelAvailability(string api)
{
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(api);
//JsonConvert.SerializeObject(api);
return json ;
}
Run Code Online (Sandbox Code Playgroud)
在这里我设置ResponseFormat属性是json仍然作为XML返回.
我想用json格式使用这个asmx服务有什么想法吗?
我不确定我错过了什么,我错过了什么.
我正在构建一个ASP.NET 2.0(在.Net 3.5框架上)Web应用程序,我正在包含一个Web服务.请注意,这不是 MVC项目.我希望公开一个返回JSON字符串的方法; 格式化以提供jqGrid jQuery插件.
这是我在我的服务中实现的初步测试方法:感谢(Phil Haack的MVC指南)
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getData()
{
JavaScriptSerializer ser = new JavaScriptSerializer();
var jsonData = new
{
total = 1, // we'll implement later
page = 1,
records = 3, // implement later
rows = new[]{
new {id = 1, cell = new[] {"1", "-7", "Is this a good question?", "yay"}},
new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?", "yay"}},
new …Run Code Online (Sandbox Code Playgroud)