- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有以下对象图,我正在使用 Jquery 的 $.Ajax() 将这个相同的 JSON(字符串化)“ View ”对象从浏览器发送到 ASP.Net 上的页面方法。 JAvascript 反序列化适用于 View 类中的所有字符串和 int,但我的 List<DataItem>
是空的。
我尝试了什么:使用 chrome 开发工具,我采用了字符串化的 JSON,创建了一个单元测试并同时使用了 DataContractJsonSerializer
和 JavaScriptSerializer
. DataContractJsonSerializer
对象正确反序列化了我的对象图,但是 JavaScriptSerializer
丢弃了我的 list 。如何在我的页面方法上获得正确的反序列化?
public class View
{
public string Text { get; set; }
public string AnotherText { get; set; }
public Int SomeInt { get; set; }
public List<DataItem> { get; set; }
}
public class DataItem
{
public Person person {get;set}
}
public class Person
{
public int Age {get;set}
}
var dataa = {mqvm: mqvmJSON };
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify( dataa ),
url: "GoHere.aspx/WebMethodName",
success: function(data) {
alert(data.d);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText + ' ' + errorThrown);
}
});
而不是这个( View obj 作为参数)。
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public static string CreateResponseReview(View mqvm)
{
return "Success";
}
我怎样才能得到这个? (字符串参数)
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public static string CreateResponseReview(string mqvm)
{
//do manual JSON deserialization here.
return "Success";
}
我的 JSON 看起来像这样。
{
"Text": "6",
"AnotherText":"wow"
"SomeInt": 5,
"DataItem":[
{
"person":{
"Age":23
}
},
{
"person":{
"Age":42
}
}
]
}
最佳答案
我想通了。
我不想使用 JavascriptSerializer 类,因为它转储了我的嵌套列表,所以我强制它把对象作为字符串传递给我,然后我手动反序列化它。我还不断收到“没有为 u0027system.string u0027 类型定义无参数构造函数”
请记住,U0027 是一个撇号,因此运行时可能会认为存在一个名为“System.string”的实际类型,而不是 System.string。我的问题是 - 我没有正确分隔下面名为 data2 的项目中的参数。我不得不在键和值周围加上\' ticks\'。
function requestHtmlFromServer(mqvmJSON) {
var mqvmstring = JSON.stringify(mqvmJSON);
var data2 = "{\'mqvm\':\'" + mqvmstring + "\' }"; \\<--the problem
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: data2,
url: "MedicalInformation.aspx/CreateResponseReview",
success: function(data) {
alert(data.d);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText + ' ' + errorThrown);
}
});
}
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public static string CreateResponseReview(string mqvm)
{
string noNewLines = mqvm.Replace("\n", "");
View viewModel = ToObjectFromJSON<View>(noNewLines);
//do my other stuff here
return "Success";
}
public static T ToObjectFromJSON<T>(string jsonString)
{
var serializer = new DataContractJsonSerializer(typeof(T));
var memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));
var newObject = (T)serializer.ReadObject(memoryStream);
memoryStream.Close();
return newObject;
}
关于c# - 如何正确地将 JSON 字符串反序列化为包含另一个类的嵌套列表的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559676/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!