声明一个内联ASPX年龄的类

时间:2017-12-05 12:04:30

标签: c# asp.net json-deserialization

我试图设置一个接收页面来收集数据,格式化为JSON字符串,从外部服务发送给我们,我们必须将其添加到我们的数据库。

为了简单起见,我想将所有代码保存在一个链接到此外部服务的页面中。

我可以收到JSON字符串,但我似乎无法对其进行反序列化,因为它不会接受我的课程。

我的代码如下所示。 出于调试原因,我还将数据导出到外部日志。 如果没有添加某个日期,我可以尝试查看日志,如果该消息中有任何特殊内容导致问题。

如果我从代码中删除我的类,页面将正确加载。 如果我把课程放入其中,就会引发错误(我无法看到,因为我正在使用在线网络服务器)。

有谁知道这段代码有什么问题?

<%@ Page Language="C#" %>
<%@ import namespace="System.Data"%>
<%@ import namespace="System.Data.SqlClient"%>
<%@ import namespace="System.IO" %>
<%@ import namespace="System.Web" %>
<%@ import namespace="System.Web.Script.Serialization" %>


<%

public class MessageClass
{
    public string type;
    public string text;
    public string url;
    public string user_name;
    public int timestamp;
}

// GET THE CONTENT THAT WAS POSTED
//StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream);
//string requestFromPost = reader.ReadToEnd();
string requestFromPost = "{type:'image',url:'https://someservice.com/picture.jpg',user_name:'user',timestamp:1511772572733}";

Response.Write(requestFromPost);

// BACKUP THE MESSAGE IN A LOG
StreamWriter sw;
try
{
  sw = File.AppendText(Server.MapPath(".\\") + "test.log");
  sw.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") +"] " + requestFromPost);
  sw.Flush();
  sw.Close();
}
catch(Exception ex)
{
  // IGNORE
}




StringBuilder sb = new StringBuilder();
JavaScriptSerializer ser = new JavaScriptSerializer();
//var response = ser.Deserialize<MessageClass>(requestFromPost);

//Response.Write(response.url);


// DATABASE STUFF GOES BELOW

%>

2 个答案:

答案 0 :(得分:0)

您需要将时间戳的数据类型更改为long,因为它不是有效的整数

答案 1 :(得分:0)

我能够为我的问题找到解决方案,尽管我认为这不是最好的解决方案。

我把课程放在-tags里。

<%@ Page Language="C#" %>
<%@ import namespace="System.Data"%>
<%@ import namespace="System.Data.SqlClient"%>
<%@ import namespace="System.IO" %>
<%@ import namespace="System.Web" %>
<%@ import namespace="System.Web.Script.Serialization" %>

<script runat="server">

    public class MessageClass
    {
        public string type;
        public string text;
        public string url;
        public string user_name;
        public long timestamp;
    }

</script>


<%



// GET THE CONTENT THAT WAS POSTED
StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream);
string requestFromPost = reader.ReadToEnd();



// DESERIALIZE THE CONTENT
JavaScriptSerializer ser = new JavaScriptSerializer();
var response = ser.Deserialize<MessageClass>(requestFromPost);

然而,如果有人有更好的建议将其保存在同一个代码块中,我全都听见了!