代码之家  ›  专栏  ›  技术社区  ›  hud

在我的服务器端绑定JSON值失败

  •  0
  • hud  · 技术社区  · 6 年前

    json 我的c代码中的值。因此,我编写了如下代码

    public static void WriteToIEMService(string jsonValue)
        {
            string TimeFormatText = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss");
            string strFileCreationDate = DateTime.Now.ToString("dd/MM/yyyy");
            string strFileName = ConfigurationManager.AppSettings["IEM_SERVICEFILE"].ToString();
    
            try
            {            
               using (StreamWriter sw = File.CreateText(ConfigurationManager.AppSettings["LogFileDirectory"].ToString() + strFileName + "_" + strFileCreationDate + ".txt"))
                {
                    List<MasterServiceResponse> records = JsonConvert.DeserializeObject<List<MasterServiceResponse>>(jsonValue);
    
                    sw.WriteLine("IEM Service started and send data to IEM below");
    
                    foreach (MasterServiceResponse record in records)
                   {
                       sw.WriteLine(record.SapId);
                   }
                }
            }
            catch (Exception)
            {
    
                throw;
            }
        }
    

    但我也有错误

    无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[IPColoBilling\u BKP.App\u Code.MasterServiceResponse]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。

    请帮忙

    我的json值如下所示

    {"SiteData":[{"SAPId":"I-UW-SRPR-ENB-I001","SiteRFEIDate":"03-11-2014","SiteRFSDate":"03-11-2014","ID_OD":"ID","ID_ODchangeDate":"04-11-2018","NoofRRHBase":"0","RRHBaseChangeEffectiveDate":"","No_Of_Tenancy":"3","TenancyChangeEffectiveDate":"03-11-2014","SiteStatus":"Active","SiteDropDate":""}]}
    

    public class MasterServiceResponse
    {
        public string SapId { get; set; }
        public string AcknowledgementID { get; set; }
        public string FlagResponse { get; set; }
        public string ResponseMessage { get; set; }
        public string GisStatus { get; set; }
        public string GisSendDate { get; set; }
        public string SiteRFEIDate { get; set; }
        public string SiteRFSDate { get; set; }
        public string SiteRRHDate { get; set; }
        public string NoofRRHBase { get; set; }
    }
    
    4 回复  |  直到 6 年前
        1
  •  3
  •   Mihir Dave    6 年前

    更新: Panagiotis Kanavos指出,您并没有创建根对象,所以必须重新构造模型。

    public class SiteData
    {
        public string SAPId { get; set; }
        public string SiteRFEIDate { get; set; }
        public string SiteRFSDate { get; set; }
        public string ID_OD { get; set; }
        public string ID_ODchangeDate { get; set; }
        public string NoofRRHBase { get; set; }
        public string RRHBaseChangeEffectiveDate { get; set; }
        public string No_Of_Tenancy { get; set; }
        public string TenancyChangeEffectiveDate { get; set; }
        public string SiteStatus { get; set; }
        public string SiteDropDate { get; set; }
    }
    
    public class RootObject
    {
        public List<SiteData> SiteData { get; set; }
    }
    

    您还必须更改反序列化代码

    例如。

    RootObject records = JsonConvert.DeserializeObject<RootObject>(jsonValue);
    
    foreach (SiteData record in records.SiteData)
    {
       sw.WriteLine(record.SapId);
    }
    
        2
  •  0
  •   Svetoslav Petrov    6 年前

    正如错误所提到的,您无法将JSON对象反序列化为列表。因此,不是:

    List<MasterServiceResponse> records = JsonConvert.DeserializeObject<List<MasterServiceResponse>>(jsonValue);
    

    MyObject obj = JsonConvert.DeserializeObject<MyObject>(jsonValue);
    
        3
  •  0
  •   Tetsuya Yamamoto    6 年前

    List<MasterServiceResponse> 收集

    您应该创建一个要保存的类 :

    public class SiteData
    {
        public List<MasterServiceResponse> MasterServiceResponse { get; set; }
    }
    

    List<MasterServiceResponse> records = JsonConvert.DeserializeObject<List<MasterServiceResponse>>(jsonValue);
    

    要像这样返回单个对象,请执行以下操作:

    SiteData records = JsonConvert.DeserializeObject<SiteData>(jsonValue);
    

    Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1

        4
  •  0
  •   Peter B    6 年前

    因为您的JSON以一个键开始 "SiteData" 如果具有数组值,则需要创建一个帮助器类来匹配该结构(例如。 class SiteResponse )具有名为 SiteData 类型 List<MasterServiceResponse> .

    代码:

    public class SiteResponse
    {
        public List<MasterServiceResponse> SiteData { get; set; }
    }
    
    private static void TestJson()
    {
        var jsonValue = "{\"SiteData\":[{\"SAPId\":\"I-UW-SRPR-ENB-I001\",\"SiteRFEIDate\":\"03-11-2014\",\"SiteRFSDate\":\"03-11-2014\",\"ID_OD\":\"ID\",\"ID_ODchangeDate\":\"04-11-2018\",\"NoofRRHBase\":\"0\",\"RRHBaseChangeEffectiveDate\":\"\",\"No_Of_Tenancy\":\"3\",\"TenancyChangeEffectiveDate\":\"03-11-2014\",\"SiteStatus\":\"Active\",\"SiteDropDate\":\"\"}]}";
    
        var siteResponse = JsonConvert.DeserializeObject<SiteResponse>(jsonValue);
        List<MasterServiceResponse> records = siteResponse.SiteData;
    }
    


    https://dotnetfiddle.net/wzg8AK