javascript - 出现“位置 0 处的 json 中的意外令牌 u”问题
问题描述
我正在通过以下代码将 DataTable 转换为 JSON:
public string DataTableToJSONWithJSONNet(DataTable table)
{
string JSONString = string.Empty;
JSONString = JsonConvert.SerializeObject(table);
return JSONString;
}
问题似乎是这没有返回正确的 JSON。JSONString 的值为:
"{\"DataTable.RemotingVersion\":{\"Major\":2,\"Minor\":0,\"Build\":-1,\"Revision\":-1,\"MajorRevision\":-1,\"MinorRevision\":-1},\"XmlSchema\":\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-16\\\"?>\\r\\n<xs:schema xmlns=\\\"\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:msdata=\\\"urn:schemas-microsoft-com:xml-msdata\\\">\\r\\n <xs:element name=\\\"Table1\\\">\\r\\n <xs:complexType>\\r\\n <xs:sequence>\\r\\n <xs:element name=\\\"ID\\\" type=\\\"xs:int\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"ImageURL\\\" type=\\\"xs:string\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"Price\\\" type=\\\"xs:decimal\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"Description\\\" type=\\\"xs:string\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"UploadDate\\\" type=\\\"xs:dateTime\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"ExpDate\\\" type=\\\"xs:dateTime\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n <xs:element name=\\\"Status\\\" type=\\\"xs:string\\\" msdata:targetNamespace=\\\"\\\" minOccurs=\\\"0\\\" />\\r\\n </xs:sequence>\\r\\n </xs:complexType>\\r\\n </xs:element>\\r\\n <xs:element name=\\\"tmpDataSet\\\" msdata:IsDataSet=\\\"true\\\" msdata:MainDataTable=\\\"Table1\\\" msdata:UseCurrentLocale=\\\"true\\\">\\r\\n <xs:complexType>\\r\\n <xs:choice minOccurs=\\\"0\\\" maxOccurs=\\\"unbounded\\\" />\\r\\n </xs:complexType>\\r\\n </xs:element>\\r\\n</xs:schema>\",\"XmlDiffGram\":\"<diffgr:diffgram xmlns:msdata=\\\"urn:schemas-microsoft-com:xml-msdata\\\" xmlns:diffgr=\\\"urn:schemas-microsoft-com:xml-diffgram-v1\\\">\\r\\n <tmpDataSet>\\r\\n <Table1 diffgr:id=\\\"Table11\\\" msdata:rowOrder=\\\"0\\\">\\r\\n <ID>1</ID>\\r\\n <ImageURL>https://i.imgur.com/S59HjAe.jpg </ImageURL>\\r\\n <Price>123.0000</Price>\\r\\n <Description>123</Description>\\r\\n <UploadDate>2019-04-19T08:30:56.913-05:00</UploadDate>\\r\\n <ExpDate>1900-01-01T00:00:00-06:00</ExpDate>\\r\\n <Status>New</Status>\\r\\n </Table1>\\r\\n </tmpDataSet>\\r\\n</diffgr:diffgram>\"}"
据我了解,结果不应包含此字符串开头的大部分内容(修订、XML 模式、列的数据类型等)。
谁能解释为什么我在转换 DT 后会获得更多信息?我相信附加信息会导致“位置 0 的 json 中的意外令牌 u”错误。我会很感激任何帮助,谢谢。
编辑:利用这个的javascript代码是:
function GetItemsList() {
try {
$('#Products').html('');
var items = '';
document.getElementById("Products").innerHTML = ""
var i = 0;
$.ajax({
type: "GET",
url: '/Home/UseGetItems',
contentType: "application/json; charset=utf-8",
success: function (result) {
var ItemData = JSON.parse(result.Data);
if (ItemData.length > 0) {
for (i; i < ItemData.length; i++) {
document.getElementById("Products").innerHTML += '<div class="w3 - col l3 s6"><div class="w3 - container"><img src="' + ItemData[i].ImageURL + '" style="width:100%"><p>' + ItemData[i].Description + '<br><b>' + ItemData[i].Price + '</b></p></div></div>';
}
$('#Products').append(items);
}
},
});
} catch (e) {
}
}
编辑 2:C# 的其余部分是:
public ActionResult UseGetItems()
{
jsonMessage result = new jsonMessage();
var ItemsList = GetItems();
return Json(new
{
Data = ItemsList,
result = true,
});
}
public string GetItems()
{
var Items = string.Empty;
try
{
DataTable dt = new DataTable();
string Connection = "Data Source=TEST; Initial Catalog=TEST;Persist Security Info=True;User ID=TEST;Password=TEST"; //ConfigurationManager.ConnectionStrings["testConn"].ConnectionString;
string Query = "SELECT * FROM [TEST] WHERE [Status] <> 'CLOSED'";
using (SqlConnection conn = new SqlConnection(Connection))
{
conn.Open();
SqlCommand cmd = new SqlCommand(Query, conn)
{
CommandType = CommandType.Text
};
//cmd.Parameters.Add(new SqlParameter("@this", "value"));
cmd.ExecuteNonQuery();
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
dataAdapter.Fill(dt);
conn.Close();
};
Items = DataTableToJSONWithJSONNet(dt);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return Items;
}
@briosheje 结果console.log(result);
是
Object
data: "{"DataTable.RemotingVersion":{"Major":2,"Minor":0,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1},"XmlSchema":"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xs:schema xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n <xs:element name=\"Table1\">\r\n <xs:complexType>\r\n <xs:sequence>\r\n <xs:element name=\"ID\" type=\"xs:int\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"ImageURL\" type=\"xs:string\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"Price\" type=\"xs:decimal\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"Description\" type=\"xs:string\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"UploadDate\" type=\"xs:dateTime\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"ExpDate\" type=\"xs:dateTime\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n <xs:element name=\"Status\" type=\"xs:string\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n </xs:sequence>\r\n </xs:complexType>\r\n </xs:element>\r\n <xs:element name=\"tmpDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"Table1\" msdata:UseCurrentLocale=\"true\">\r\n <xs:complexType>\r\n <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\r\n </xs:complexType>\r\n </xs:element>\r\n</xs:schema>","XmlDiffGram":"<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">\r\n <tmpDataSet>\r\n <Table1 diffgr:id=\"Table11\" msdata:rowOrder=\"0\">\r\n <ID>1</ID>\r\n <ImageURL>https://i.imgur.com/S59HjAe.jpg </ImageURL>\r\n <Price>123.0000</Price>\r\n <Description>123</Description>\r\n <UploadDate>2019-04-19T08:30:56.913-05:00</UploadDate>\r\n <ExpDate>1900-01-01T00:00:00-06:00</ExpDate>\r\n <Status>New</Status>\r\n </Table1>\r\n </tmpDataSet>\r\n</diffgr:diffgram>"}"
result: true
__proto__: Object
编辑 3:如果我将 C# 更改为返回的 DT(而不是在那里序列化),如下所示:
public DataTable GetItems()
{
DataTable Items;
try
{
DataTable dt = new DataTable();
string Connection = "Data Source=TEST; Initial Catalog=TEST;Persist Security Info=True;User ID=TEST;Password=TEST"; //ConfigurationManager.ConnectionStrings["testConn"].ConnectionString;
string Query = "SELECT * FROM [TEST] WHERE [Status] <> 'CLOSED'";
using (SqlConnection conn = new SqlConnection(Connection))
{
conn.Open();
SqlCommand cmd = new SqlCommand(Query, conn)
{
CommandType = CommandType.Text
};
//cmd.Parameters.Add(new SqlParameter("@this", "value"));
cmd.ExecuteNonQuery();
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
dataAdapter.Fill(dt);
conn.Close();
};
Items = dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return Items;
}
然后的结果var ItemData = JSON.parse(result.data);
给出了错误:
Unexpected token o in JSON at position 1
编辑4:
public class jsonMessage
{
public string Message { get; set; }
public string MessageList { get; set; }
public bool Status { get; set; }
}
解决方案
推荐阅读
- mysql - 指数超出范围。插入数据时必须为非负且小于集合错误的大小
- javascript - 将小时、分钟、秒添加到输入字段并使用 js 显示为 hh:mm:ss am/pm 并在保存到 Blazor 中的 db 之前转换为 Timespan
- masstransit - MassTransit StateMachineSagaTestHarness - 双重消息消费
- flutter - 如何使用 Dart 反射监听方法调用?
- lua - 如何在 Roblox 中的字符串中添加数字
- vba - 如何从odt解密奇怪的宏?
- vaadin7 - 在 vaadin 14.4.4 中使用插件
- regex - 正则表达式 VBA
- javascript - 谷歌地图 getPlace().geometry 总是未定义
- reactjs - TypeError:无法读取未定义错误的属性“地图”