Home > Enterprise >  Error "The JSON value could not be converted to System.String. Path: $[1].Interests[1].Meta[9].
Error "The JSON value could not be converted to System.String. Path: $[1].Interests[1].Meta[9].

Time:10-18

public Class Employee{

  public string Name { get; set; }

  [Column(TypeName = "jsonb")]
  public List<Section> Sections { get; set; }

}

public Class Sections{

   public string Booking { get; set; }


  [Column(TypeName = "jsonb")]
  public List<Interest> Interests { get; set; }

}

public Class Interest{

  public string Title { get; set; }

  public List<Meta> Meta { get; set; }


  public List<WithAlt> Images { get; set; }
}

public Class Meta{

      public string Type { get; set; }

     public string Content { get; set; }

}

public Class WithAlt{

     public string content { get; set; }

     public string Alt { get; set; }

}

I fetch data from the Employee table

Employee while fetching the data Sections Column I got

The JSON value could not be converted to System.String. Path: $[1].Interests[1].Meta[9].Content | LineNumber: 0 | BytePositionInLine: 10073. 

Error at

public Task<Employee> CheckEmployee(string name){

// error throw Line
var query= await catalogDbContext.Employee
             .Where(i.Name === name)
            .FirstOrDefault();
}

Not for all value but some value that List<Section> or List<Interest> or List<Meta> or List<WithAlt> have null value

When I manually add the value to sections column bellow

{
  "Booking": "",
  "Interests":[
   {
       "Title":"",

       "Meta":[

          { 
           
             "Type" : " ", 
          
              "Content" : " "
          }
         ],

     "Images" : [
      {
         "content" : " ",

         "alt" : " "
      }
    ]
  }
],

  }

it will not throw the error

Are there any way to define the default value to the above fields using code first approach

when I initialize Sections property like

public List<Section> Sections { get; set; }={};

it shows the following error

Can only use array initializer expressions to assign to array types. Try using a new expression instead.

CodePudding user response:

I just deserialiazed you json , everything is working properly, I couldn' t find any errros


public static void Main()
{
var json = "{\"Booking\":\"\",\"Interests\":[{\"Title\":\"\",\"Meta\":[{\"Type\":\" \",\"Content\":\" \"}],\"Images\":[{\"content\":\" \",\"alt\":\" \"}]}]}";
var jd = JsonConvert.DeserializeObject<Data>(json);
}

classes

    public class Data
    {
        public string Booking { get; set; }
        public List<Interest> Interests { get; set; }
    }
    public class Interest
    {
        public string Title { get; set; }
        public List<Meta> Meta { get; set; }
        public List<Image> Images { get; set; }
    }

    public class Meta
    {
        public string Type { get; set; }
        public string Content { get; set; }
    }

    public class Image
    {
        public string content { get; set; }
        public string alt { get; set; }
    }

CodePudding user response:

Can only use array initializer expressions to assign to array types. Try using a new expression instead.

You can convert the json data to Section type rather than List<Section> type.

var json = "{\"Booking\":\"\",\"Interests\":[{\"Title\":\"\",\"Meta\":[{\"Type\":\" \",\"Content\":\" \"}],\"Images\":[{\"content\":\" \",\"alt\":\" \"}]}]}";
            var s = JsonConvert.DeserializeObject<Section>(json);
            //If you want to set Employee.Sections with json data,try this
            Employee e = new Employee { Sections = new List<Section> { s } };

Models(change class name Sections to Section,Interests to Interest):

public class Employee
    {

        public string Name { get; set; }

        [Column(TypeName = "jsonb")]
        public List<Section> Sections { get; set; }

    }

    public class Section
    {

        public string Booking { get; set; }


        [Column(TypeName = "jsonb")]
        public List<Interest> Interests { get; set; }

    }

    public class Interest
    {

        public string Title { get; set; }

        public List<Meta> Meta { get; set; }


        public List<WithAlt> Images { get; set; }
    }

    public class Meta
    {

        public string Type { get; set; }

        public string Content { get; set; }

    }

    public class WithAlt
    {

        public string content { get; set; }

        public string Alt { get; set; }

    }
  • Related