如何将json动态对象转换为c#实体

如何将json动态对象转换为c#实体,json,model-view-controller,dynamic,entity,mapper,Json,Model View Controller,Dynamic,Entity,Mapper,当我在应用mvc ajax json后,将json动态对象转换为实体是一个难题 在我的应用程序中,电影是一个业务实体,json对象比电影实体具有行状态属性。当json数据发布到mvc服务器端时,可以将其转换为动态对象,在这个阶段一切都可以。但在对每一行状态处理一些逻辑之后,需要将动态对象转换为电影业务实体,然后开始数据库事务逻辑。但是,即使我尝试不同的方法来投射对象,也会遇到麻烦 请问是否有人使用了相同的铸造方法?谢谢你的建议或回复 public class movie { public

当我在应用mvc ajax json后,将json动态对象转换为实体是一个难题

在我的应用程序中,电影是一个业务实体,json对象比电影实体具有行状态属性。当json数据发布到mvc服务器端时,可以将其转换为动态对象,在这个阶段一切都可以。但在对每一行状态处理一些逻辑之后,需要将动态对象转换为电影业务实体,然后开始数据库事务逻辑。但是,即使我尝试不同的方法来投射对象,也会遇到麻烦

请问是否有人使用了相同的铸造方法?谢谢你的建议或回复

public class movie
{
    public int id
    {
        get;
        set;
    }

    public string title
    {
        get;
        set;
    }
}



    /// <summary>
    /// Convert Json Object to Entity
    /// </summary>
    /// <param name="id">ajax post value
    /// format: {"id": "{\"id\": 1, \"title\": \"sharlock\", \"RowStatus\": \"deleted\"}"}
    /// </param>
    [AllowAnonymous]
    [HttpPost]
    public void DoJsonSimple(string id)
    {
        string title;
        var entity = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(id);

        //*** entity is dynamic object
        //*** entity.id, entity.title and entity.RowStauts can be accessed.
        int first = entity.id;
        var status = entity.RowStatus;
        if (status == "deleted")
        {
            //*** m1 is null
            //*** m1.title can not be accessed
            movie m1 = entity as movie;
            title = m1.title;

            //*** m2 is an empty object
            //*** m2.id is 0, m2.title is null
            var m2 = AutoMapperHelper<dynamic, movie>.AutoConvertDynamic(entity);
            title = m2.title;

            //*** Exception: Object must implement IConvertible. 
            var m3 = EmitMapper.EMConvert.ChangeTypeGeneric<dynamic, movie>(entity);
            title = m3.title;
        }
    }
公共类电影
{
公共整数id
{
得到;
设置
}
公共字符串标题
{
得到;
设置
}
}
/// 
///将Json对象转换为实体
/// 
///ajax post值
///格式:{“id”:“{\“id\”:1、\“title\”:“sharlock\”、\“RowStatus\”:“deleted\”}
/// 
[异名]
[HttpPost]
public void DoJsonSimple(字符串id)
{
字符串标题;
var entity=Newtonsoft.Json.JsonConvert.DeserializeObject(id);
//***实体是动态对象
//***可以访问entity.id、entity.title和entity.rowstatuts。
int first=entity.id;
var status=entity.RowStatus;
如果(状态=“已删除”)
{
//***m1为空
//***m1.title无法访问
电影m1=作为电影的实体;
title=m1.title;
//***m2是一个空对象
//***m2.id为0,m2.title为空
var m2=AutoMapperHelper.AutoConvertDynamic(实体);
title=m2.title;
//***异常:对象必须实现IConvertible。
var m3=EmitMapper.EMConvert.ChangeTypeGeneric(实体);
title=m3.title;
}
}

只需为行创建另一个类

公共类请求
{
[JsonProperty(“id”)]
公共字符串Json{get;set;}
}
公映
{
[JsonProperty(“id”)]
公共int Id{get;set;}
[JsonProperty(“所有权”)]
公共字符串标题{get;set;}
}
//对于变体1,这两个选项中的任何一个。。。
公共类行
{
公共字符串RowStatus{get;set;}
}
//或者对于变体2。。。
公共类电影
{
公共字符串RowStatus{get;set;}
}
[异名]
[HttpPost]
public void DoJsonSimple_Variant1(字符串id)
{
var json=JsonConvert.DeserializeObject(id).json;
var entity=JsonConvert.DeserializeObject(json);
var row=JsonConvert.DeserializeObject(json);
开关(行。行状态)
{
“删除”一案:
//删除实体
打破
// ...
}
// ...
}
[异名]
[HttpPost]
public void DoJsonSimple_Variant2(字符串id)
{
var json=JsonConvert.DeserializeObject(id).json;
var row=JsonConvert.DeserializeObject(json);
var实体=(电影)行;
开关(行。行状态)
{
“删除”一案:
//删除实体
打破
// ...
}
// ...
}

hi,我的项目中有很多实体,如果每个实体都需要创建一个新的row类,这是一项繁重的工作……这就是我建议使用变体1的原因。您只需要使用不同的类型反序列化json两次。这比使用dynamic要简单得多。是的,最好只新建一行类,对任何实体反序列化json数据两次。好主意,谢谢。