gpt4 book ai didi

c# - 如何正确地将 JSON 字符串反序列化为包含另一个类的嵌套列表的类

转载 作者:数据小太阳 更新时间:2023-10-29 04:59:29 25 4
gpt4 key购买 nike

我有以下对象图,我正在使用 Jquery 的 $.Ajax() 将这个相同的 JSON(字符串化)“ View ”对象从浏览器发送到 ASP.Net 上的页面方法。 JAvascript 反序列化适用于 View 类中的所有字符串和 int,但我的 List<DataItem>是空的。

我尝试了什么:使用 chrome 开发工具,我采用了字符串化的 JSON,创建了一个单元测试并同时使用了 DataContractJsonSerializerJavaScriptSerializer . 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com