C# 將object對象轉換為實體對象

来源:https://www.cnblogs.com/aoede-jacqueline/archive/2019/03/26/10599257.html
-Advertisement-
Play Games

C# 將object對象轉換為實體對象.代碼如下: 調用時: 是不是很簡單? ...


C# 將object對象轉換為實體對象.代碼如下:

/// <summary>
/// 將object對象轉換為實體對象
/// </summary>
/// <typeparam name="T">實體對象類名</typeparam>
/// <param name="asObject">object對象</param>
/// <returns></returns>
private T ConvertObject<T>(object asObject) where T : new()
{
    //創建實體對象實例
    var t = Activator.CreateInstance<T>();
    if (asObject != null)
    {
        Type type = asObject.GetType();
        //遍歷實體對象屬性
        foreach (var info in typeof(T).GetProperties())
        {
            object obj = null;
            //取得object對象中此屬性的值
            var val = type.GetProperty(info.Name)?.GetValue(asObject)
            if (val != null)
            {
                //非泛型
                if (!info.PropertyType.IsGenericType)
                    obj = Convert.ChangeType(val, info.PropertyType)
                else//泛型Nullable<>
                {
                    Type genericTypeDefinition = info.PropertyType.GetGenericTypeDefinition();
                    if (genericTypeDefinition == typeof(Nullable<>))
                    {
                        obj = Convert.ChangeType(val, Nullable.GetUnderlyingType(info.PropertyType));
                    }
                }
                info.SetValue(t, obj, null);
            }
        }
    }
    return t;
}

調用時:

/// <summary>
/// test
/// </summary>
public void test()
{
    var obj = new {
        id=1,name="張三",sex=1,age=22
    };
    //轉換
    var userModel = ConvertObject<user>(obj);
}

/// <summary>
/// 用戶
/// </summary>
public class user
{
    /// <summary>
    /// 編號
    /// </summary>
    public int id { set; get; }
    /// <summary>
    /// 姓名
    /// </summary>
    public string name { set; get; }
    /// <summary>
    /// 性別
    /// </summary>
    public int sex { set; get; }
    /// <summary>
    /// 年齡
    /// </summary>
    public int age { set; get; }
}

是不是很簡單?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //用C#自帶的壓縮,最少要.net4.5或以上,先增加引用 System.IO.Compression.FileSystem // FolderBrowserDialog dlg = new FolderBrowserDialog(); //壓縮目錄 顯示一個標準選擇文件夾對話框 OpenFile ...
  • 原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下麵的圖形,展示了EF的總體架構: 讓我們來分別看看,每個組件都是啥吧: EDM(Entity Data Model)【實體數據模型】:EDM( ...
  • 今年來了新公司,公司沒有用什麼新技術,架構就簡單的前後分離,但是我推一下新的技術,在這基礎上我要培訓一下同事,讓他們能接受,對新技術不感到陌生,並且認可願意去學習。其實在這個過程中也能讓他們認同我這個人吧!老闆是一位曾經在9幾年寫過一段時間代碼的人,對新的技術什麼的不是很瞭解,我提的建議什麼的很難去 ...
  • 最近在做項目的時候遇到一種情:用C#程式以管理員許可權去執行一個bat文件,且此bat文件裡面有cd命令來進入文件的下一級目錄,比如: echo test begin cd test1 setup1.exe cd test2 setup2.exe echo test finished echo off ...
  • 規劃、梳理、構建電子化的流程系統平臺 梳理成企業的行政類、人事類、項目類、財務類。所有的流程都是企業管理制度的電子化表達,通過固化流程系統的構建支撐企業管理控制行落地 建立全新公司統一的工作流管理平臺,採用電子化的流程,突破各種邊界,進行胯部門,跨企業的及時溝通,構造協作的環境。系統支持自定義各種簡 ...
  • 一、背景 1.1 使用場景 一致性哈希演算法一般用於解決分散式系統當中的熱點問題,用於提升分散式系統的可擴展性與健壯性。 1.2 解決的問題 一般用於分散式緩存系統當中的緩存擊穿問題,簡單哈希在服務節點數量產生變化的時候,其緩存命中率很低,從而導致大量介面直接請求資料庫,造成緩存擊穿的情況。 例如我們 ...
  • Visual Studio 2019 發佈活動 2019 年 4 月 2 日,星期二 | 上午 9:00 (PT) 圍觀: https://visualstudio.microsoft.com/zh hans/vs2019 launch/ https://github.com/Microsoft/V ...
  • 上一篇曾說道我從2018年開始創業,是因為機緣巧合之下開發了一款電話機器人程式,我想嘗試能否做好一個小而美的軟體,就索性成立公司去做了。大家對接到許多推銷電話都感到厭煩,所以並不指望這個產品有大的發展,只希望它在適當的場景下能夠發揮一點的作用。在開發和優化這個軟體的過程中遇到了一些比較有意思技術問題 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...