替换roundtrip serialize-deserialize

时间:2015-09-07 23:06:14

标签: c# json serialization constructor

我有一个包含超过100列(包括blob)的表格,我想只用几个填充列来制作对象的副本。 现在我通过选择所需的列并使用Json.NET进行往返序列化和反序列化来做到这一点,这是无效的。什么是处理这种情况的最佳方式?

BL.Case mCase;
BL.Case temp = db.Cases.Select(
               xx => new
               {
                   CaseID = xx.CaseID,
                   FirstName = xx.FirstName,
                   LastName = xx.LastName
              }).FirstOrDefault(u => u.CaseID == CaseID);

mCase = Newtonsoft.Json.JsonConvert.DeserializeObject<BL.Case>(Newtonsoft.Json.JsonConvert.SerializeObject(temp));

2 个答案:

答案 0 :(得分:0)

使用AutoMapper

做这样的事情:

curl -v -m 60 -H 'Accept-Language: en-US,en;q=0.8,nb;q=0.6' -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" http://imeidata.net -e http://imeidata.net/iphone/model-check http://imeidata.net/iphone/model-check?sn=C8PKTRF5DTC1

答案 1 :(得分:0)

需要更多代码(但可能表现更好)的另一种解决方案是执行以下操作:

如果您需要单个项目:

BL.Case mCase = null;
var temp = db.Cases.Select(
            xx => new
            {
                CaseID = xx.CaseID,
                FirstName = xx.FirstName,
                LastName = xx.LastName
            }).FirstOrDefault(u => u.CaseID == CaseID);



if (temp != null)
{
    mCase = new Case()
    {
        CaseID = temp.CaseID,
        FirstName = temp.FirstName,
        LastName = temp.LastName,
    };
}

如果您需要多件物品:

var temp = db.Cases.Select(
            xx => new
            {
                CaseID = xx.CaseID,
                FirstName = xx.FirstName,
                LastName = xx.LastName
            }); //Here you can filter your query if you want using Where

var result = temp
.ToList() //This will actually execute the query on the database
.Select(x => new Case() //Now you can do this since now we are working on in-memory data
{
    CaseID = x.CaseID,
    FirstName = x.FirstName,
    LastName = x.LastName
});