मेरे पास नियंत्रक विधि GetLayer2() है। यह GetLayer0 () और GetLayer1 () के समान है

[HttpGet]
public async Task<JsonResult> GetLayer2(string datePassedIn, string eventType, string driverId)
{
    string orgCode = "HVO"; //User.Identity.GetOrgCode();
    DateTime? processDate;
    DateTime defaultDate = DateTime.Today.AddDays(-1);  //default yesterday 

    if (String.IsNullOrEmpty(datePassedIn))
    {
        _logger.LogError(String.Format("Date passed in was NULL or empty. Using default date {0}", defaultDate.ToString(inputDateFormat)), null);
        processDate = defaultDate;
    }
    else
    {
        try
        {
            processDate = DateTime.ParseExact(datePassedIn, inputDateFormat, cultureProvider);
        }
        catch (FormatException ex)
        {
            _logger.LogError(ex, "Error formatting date {datePassedIn} did not match {inputDateFormat}. using default date {defaultDate}", null);
            processDate = defaultDate;
        }
    }

    driverId = HttpUtility.UrlDecode(driverId);


    IEnumerable<EventTypeLayer2> results = await _context.EventTypeLayer2Results
                                                        .FromSql($"usp_dd_EventType_2 @p0, @p1, @p2, @p3", orgCode, processDate, eventType, driverId)
                                                        .ToListAsync();


    JsonResult jr = Json(results);
    return jr;
}

कोड को संक्षेप में प्रस्तुत किया जा सकता है:

  • संगठन कोड प्राप्त करें
  • datePassedIn को प्रोसेसडेट में प्राप्त करें और पार्स करें
  • Url ड्राइवर को डिकोड करें Id
  • परिणामों में आउटपुट डालते हुए, एक संग्रहीत खरीद निष्पादित करें
  • परिणामों को Json में बदलें (इसे समस्या निवारण में सहायता के लिए जोड़ा गया था)
  • परिवर्तित परिणाम लौटाएं

मूल रूप से यह return Json(results); था जब jr मान को डीबग करने पर सही मान परिणाम होता है

Image of paused VS session showing value of <code>jr</code>

जब नेटवर्क टैब में ब्राउज़र (क्रोम) में देखा जाता है, तो मुझे वस्तुओं की सही गिनती मिलती है, लेकिन वे सभी खाली होती हैं।

Image of results in Network tab

मैं अपने परिणाम कैसे प्राप्त करूं?

संपादित करें - जोड़ा वर्ग परिभाषा। हालांकि ये ईएफ वर्ग हैं, लेकिन इन्हें संग्रहित प्रक्रियाओं द्वारा भरा जा रहा है।

[DataContract]
public class EventTypeLayer2
{
    [IgnoreDataMember]
    [Key]
    public Int64 RowId { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string EventTypeDisplay { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string EventTypeId { get; set; }

    [Column(TypeName = "varchar(20)")]
    public string Colour { get; set; }

    [Required]
    public int Value { get; set; }

    [Column(TypeName = "varchar(100)")]
    public string DriverId { get; set; }

    public int NodeId { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime StartTime { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime EndTime { get; set; }

    public int FirstLogId { get; set; }

    public int LastLogId { get; set; }

    public int MinSpeed { get; set; }

    public int MaxSpeed { get; set; }

    public int AvgSpeed { get; set; }

    public int CalcSummOdo { get; set; }
}
7
Hecatonchires 3 सितंबर 2019, 02:58

1 उत्तर

सबसे बढ़िया उत्तर

आप EventTypeLayer2 वर्ग के लिए [DataContract] विशेषता का उपयोग कर रहे हैं, लेकिन आपने किसी भी वर्ग गुण के लिए [DataMember] विशेषता प्रदान नहीं की है।

दस्तावेज़ीकरण से:

आपको DataMemberAttribute को किसी भी फ़ील्ड, प्रॉपर्टी या ईवेंट पर भी लागू करना होगा जिसमें वे मान हों जिन्हें आप क्रमबद्ध करना चाहते हैं।

यही कारण है कि आपको वस्तुओं की सही गिनती मिल रही है, लेकिन बिना किसी वैध सदस्य के।

संभव समाधान:

१) कक्षा से [DataContract] विशेषता को हटा दें। डिफ़ॉल्ट रूप से, सभी सार्वजनिक संपत्तियों को क्रमबद्ध किया जाएगा।

2) उन संपत्तियों में [DataMember] विशेषता जोड़ें जिन्हें आप क्रमबद्ध करना चाहते हैं।

8
EylM 9 सितंबर 2019, 20:09