【问题标题】:Asp.Net Mvc Entity Framework Deserialized object Linq query null objectAsp.Net Mvc Entity Framework 反序列化对象 Linq 查询空对象
【发布时间】:2019-02-24 16:25:03
【问题描述】:

我将 JSON 文件反序列化为我的实体类。为简化起见,假设这些是我的课程

public class Result{
 ...
 public List<Sens> senses { get; set; }
}
public class Sens{
...    
 public Object definition { get; set; }
 }

在我将 JSON 反序列化为插入数据库的结果对象后。没有错误,我可以毫无冲突地插入 Result 和 Senses。但是,当我使用这样的 LINQ 查询从数据库调用 Result 时,我得到了 Result 对象,但我的感觉却是空的。 问题 1 为什么以及如何解决它

var results =(from r in db.Results
         where r.headword == Id
         select r).ToList();

我尝试像这样将我的感官添加到结果中

 foreach (Result item in resultmodel.Results)
 {
     item.senses = (from s in db.Senses
                           join r in db.Results on s.res equals r
                           where r.Id_ == item.Id_
                           select s).ToList();
 }

我可以添加,但是当我尝试从我的角度展示感官时,我得到了

System.Collections.Generic.List`1[System.String]

但我在等待它会是一个字符串 问题 2 我的方法有什么问题。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework linq deserialization


    【解决方案1】:

    如果您将 JSON 字符串转换为 c# 对象,则不会有任何问题。但作为回报,您希望将字符串映射到对象。那个物体是什么?有哪些属性? C# 对此一无所知。

    在我的一个项目中,我在从 Redis 缓存服务器写入和读取时遇到了类似的问题。 我在序列化对象并使用这些类型反序列化时添加了类型定义。

    序列化:

    var jsonString = JsonConvert.SerializeObject(item, _settings);
    return Encoding.UTF8.GetBytes(jsonString);
    

    反序列化:

    JsonConvert.DeserializeObject<T>(jsonString, _settings);
    

    设置:

    private static readonly JsonSerializerSettings _settings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All,
        Formatting = Formatting.None,
        NullValueHandling = NullValueHandling.Ignore,
        DefaultValueHandling = DefaultValueHandling.Ignore
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 你认为问题来自反序列化方法吗?我可以毫无问题地插入数据库。当我记得它打破了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2015-11-09
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多