1

JSONでの日付の表現に問題があります。データを取得するためのWebサービスとしてServiceStackを使用しています。サーバー側の私のコードは次のとおりです。

    public object Execute(GetNoPatientList request)
    {
        NoPatientList _noPatientList = new NoPatientList();

        List<string> _noMatchPatientList = new List<string>();
        List<NoPatientList> _newList = new List<NoPatientList>();
        try
        {
            using (SqlConnection cn = new SqlConnection(Database.WaldenWebConnection))
            {
                cn.Open();
                using (SqlCommand cm = cn.CreateCommand())
                {
                    cm.CommandText = "select [DateTimeStamp] as DateCreated,[ID],[PatientMRN],[FirstName],[MiddleName]"
                        + " ,[LastName],convert(varchar,[DOB],101) as DOB,[Sex],[Note],[Source] as Interface"
                        + " from PatientNoMatch"
                        + " where FoundMatch = 'F'"
                        + " and Show = 'T'"
                        + " order by DateTimeStamp desc";

                    SqlDataReader dr = cm.ExecuteReader();
                    while (dr.Read())
                    {
                        NoPatientList _noPatientList1 = new NoPatientList();

                        _noPatientList1.PatientMRN = dr["PatientMRN"].ToString();
                        _noPatientList1.FirstName = dr["FirstName"].ToString();
                        _noPatientList1.MiddleName = dr["MiddleName"].ToString();
                        _noPatientList1.LastName = dr["LastName"].ToString();
                        _noPatientList1.DOB = dr["DOB"].ToString();
                        _noPatientList1.Sex = dr["Sex"].ToString();
                        _noPatientList1.Note = dr["Note"].ToString();
                        _noPatientList1.DateCreated = dr.GetDateTime(0);
                        _noPatientList1.Interface = dr["Interface"].ToString();

                        _newList.Add(_noPatientList1); 
                    }
                    return _newList;
                }
            }
        }
        catch
        {
            return _newList;
        }
    }

タイプは次のように表されます。

[DataContract]
public class NoPatientList
{
    [DataMember]
    public string ID { get; set; }

    [DataMember]
    public string PatientMRN { get; set; }

    [DataMember]
    public string FirstName { get; set; }

    [DataMember]
    public string MiddleName { get; set; }

    [DataMember]
    public string LastName { get; set; }

    [DataMember]
    public string Sex { get; set; }

    [DataMember]
    public string DOB { get; set; }

    [DataMember]
    public string Note { get; set; }

    [DataMember]
    public DateTime DateCreated { get; set; }

    [DataMember]
    public string Interface { get; set; }

}

Webサービスは、次の呼び出しからSilverlightアプリケーションによって使用されています。

/ InterfaceUtility / servicestack / json / syncreply /

Silverlightアプリケーションは、次のコードを使用してコードをグリッドに処理しています

    private void GetNoPatientMatchData()
    {
        try
        {
            gridViewNoMatch.ItemsSource = null; 
        }
        catch { }
        _client = new WebClient();
        _client.OpenReadCompleted += (a, f) =>
        {
            if (!f.Cancelled && f.Error == null)
            {
                _listOfNoPatientsMatches = new List<NoPatientList>();                    
                MemoryStream _memoryStream = new MemoryStream();
                f.Result.CopyTo(_memoryStream);
                _memoryStream.Position = 0;

                StreamReader _streamReader = new StreamReader(_memoryStream);

                string _memoryStreamToText = _streamReader.ReadToEnd();

                List<NoPatientList> _deserializedNoPatientList = (List<NoPatientList>)Newtonsoft.Json.JsonConvert.DeserializeObject(_memoryStreamToText, typeof(List<NoPatientList>));                   
                gridViewNoMatch.ItemsSource = _deserializedNoPatientList;
            }
            else
            {
                MessageBox.Show(f.Error.Message,
                    "Error", MessageBoxButton.OK);
            }
        };

        _client.OpenReadAsync(new Uri(_serviceUri + "getnopatientlist"));

問題は、DateTimeフィールドの時刻が常に6時間ずれているように見えることです。

何が起こっているのかについて何かアイデアはありますか?

4

1 に答える 1

1

これはおそらくタイムゾーンの問題です。それを確認します:

  • WebサービスはUTC形式で日付/時刻を返します。
  • コードはこれらの日付/時刻をUTCの日付と時刻として解析しています。
于 2012-11-29T19:03:02.027 に答える