我用json发布此对象
[DataContract(Namespace = "http://localhost:30366/avtorji")]
public class Avtor
{
[DataMember]
public int idAvtor { get; set; }
[DataMember]
public string ime { get; set; }
[DataMember]
public string priimek { get; set; }
[DataMember]
public DateTime datum_rojstva { get; set; }
public Avtor() { }
}
这是我的要求:
{
"idAvtor": 4,
"ime": "M Vaqqas",
"priimek": "Noob",
"datum_rojstva": "2014-01-03 23:28:56"
}
我的功能是
public void DodajAvtorja(Avtor avtor)
{
string connString = null;
try
{
connString = "server=localhost;userid=;password;database=";
MySqlConnection conn = new MySqlConnection(connString);
MySqlCommand comm = conn.CreateCommand();
//avtor.datum_rojstva.ToString("yyyy-MM-dd HH:mm:ss")
comm.CommandText = "INSERT INTO avtor (idAvtor, ime, priimek, datum_rojstva)"
+" VALUES (@idAvtor, @ime, @priimek, @datum_rojstva)";
comm.Parameters.AddWithValue("@idAvtor", avtor.idAvtor);
comm.Parameters.AddWithValue("@ime", avtor.ime);
comm.Parameters.AddWithValue("@priimek", avtor.priimek);
comm.Parameters.AddWithValue("@datum_rojstva", avtor.datum_rojstva);
conn.Open();
int dodanih = comm.ExecuteNonQuery();
if (dodanih > 0)
{
UriTemplateMatch match = WebOperationContext.Current.IncomingRequest.UriTemplateMatch;
UriTemplate template = new UriTemplate("/avtor/{idAvtor}");
Uri novAvtorUri = template.BindByPosition(match.BaseUri, avtor.idAvtor.ToString());
WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(novAvtorUri);
}
conn.Close();
}
catch (Exception)
{
throw;
}
}
它给了我一个错误" 400 Bad Request"在它开始运作之前。我假设这是因为DateTime属性。你能用这种方式发送日期时间吗?什么是解决方案?
谢谢你的帮助!
答案 0 :(得分:1)
WCF使用DataContractJsonSerializer
进行JSON序列化。根据{{3}},此序列化程序对DateTime
使用以下格式:
表示实际数字(本例中为“0500”)及其符号(+或 - )。
DateTime
值以"/Date(700000+0500)/"
的形式显示为JSON字符串,其中第一个数字(在提供的示例中为700000)是GMT时区中的毫秒数,常规(非日光)自1970年1月1日午夜以来的时间。这个数字可能是负值,表示较早的时间。示例中由"+0500"
组成的部分是可选的,表示时间属于docs种类 - 也就是说,应该在反序列化时转换为本地时区。如果不存在,则将时间反序列化为Local。
因此,您需要以这种方式格式化"datum_rojstva"
:
{
"datum_rojstva": "/Date(1388791736000)/",
"idAvtor": 4,
"ime": "M Vaqqas",
"priimek": "Noob"
}
有关格式化此类日期的帮助,请参阅Utc。
有关Microsoft选择此格式的原因的一些历史记录,请参阅How do I format a Microsoft JSON date?。