ODP.net 截断时间戳毫秒数

ODP.net Truncating Timestamp Milliseconds

我正在使用 ODP.net 从 Oracle 获取一些数据,在一个特定的数据集中,我正在获取时间戳类型的字段。无论我最后做什么,无论是将其转换为 DateTime 还是将其转换为字符串,它总是会截断毫秒数。

这是从我的存储过程返回的示例:

10/28/2016 4:05:53.873 下午

这就是我将它映射到我的模型时的样子,无论 属性 是 DateTime 还是字符串:

2016 年 10 月 28 日 4:05:53 下午

这是我的过程调用的样子:

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Schema.Package.someProcedure";
cmd.Parameters.Add(new OracleParameter("P_1", OracleDbType.Int32, ParameterDirection.Input));
cmd.Parameters.Add(new OracleParameter("P_output", OracleDbType.RefCursor, ParameterDirection.Output));

cmd.Parameters["P_1"].Value = someVar;

using (OracleDataReader dr = cmd.ExecuteReader())
{
    while (dr.Read())
    {
        myObjList.Add(
            new myObject
            {
                prop1 = Convert.ToString(dr["ID_1"]),
                prop2 = Convert.ToString(dr["ID_2"]),
                dtProp = Convert.ToDateTime(dr["TIME_STAMP1"]),
                stringProp = Convert.ToString(dr["TIME_STAMP2"])
            });
    }
}

最终目标是将这个对象列表序列化为 JSON,DateTime 属性 提出了另一个问题,因为它以这种格式序列化:

\/Date(1477685153873)\/

因此,如果可能的话,我想将 Oracle 时间戳转换为字符串,同时保留毫秒数。我是 ODP.net 的新手,所以我在访问返回数据的方式上是否遗漏了什么?

我让它工作了,但它不漂亮或难以维护。我不得不使用 myTimeStampProp = Convert.ToString(dr.GetOracleTimeStamp(29)) 而不是按名称引用该列。就像我说的,没有列名就不太容易维护,但它确实有效。