How to create own dynamic type or dynamic object in C#

How to create own dynamic type or dynamic object in C#
How to create own dynamic type or dynamic object in C#

using System.Reflection;
using System.Reflection.Emit;
public static class MyTypeBuilder
{

public static System.Collections.IList CreateInstanceIList(Type _type)
{
Type customList = typeof(List<>).MakeGenericType(_type);
var result = (System.Collections.IList)Activator.CreateInstance(customList);
return result;
}
public static Type CompileResultType(Dictionary listOfFields)
{
TypeBuilder tb = GetTypeBuilder();
foreach (var field in listOfFields)
CreateProperty(tb, field.Key, field.Value);

Type objectType = tb.CreateType();

return objectType;
}

private static TypeBuilder GetTypeBuilder()
{
var typeSignature = “MyDynamicType_” + DateTime.Now.ToString(“yyyyMMddHHmmss”);
var an = new AssemblyName(typeSignature);
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(“MainModule”);
TypeBuilder tb = moduleBuilder.DefineType(typeSignature,
TypeAttributes.Public |
TypeAttributes.Class |
TypeAttributes.AutoClass |
TypeAttributes.AnsiClass |
TypeAttributes.BeforeFieldInit |
TypeAttributes.AutoLayout,
null);
return tb;
}

private static void CreateProperty(TypeBuilder tb, string propertyName, Type propertyType)
{
FieldBuilder fieldBuilder = tb.DefineField(“_” + propertyName, propertyType, FieldAttributes.Private);

PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null);
MethodBuilder getPropMthdBldr = tb.DefineMethod(“get_” + propertyName, MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyType, Type.EmptyTypes);
ILGenerator getIl = getPropMthdBldr.GetILGenerator();

getIl.Emit(OpCodes.Ldarg_0);
getIl.Emit(OpCodes.Ldfld, fieldBuilder);
getIl.Emit(OpCodes.Ret);

MethodBuilder setPropMthdBldr =
tb.DefineMethod(“set_” + propertyName,
MethodAttributes.Public |
MethodAttributes.SpecialName |
MethodAttributes.HideBySig,
null, new[] { propertyType });

ILGenerator setIl = setPropMthdBldr.GetILGenerator();
Label modifyProperty = setIl.DefineLabel();
Label exitSet = setIl.DefineLabel();

setIl.MarkLabel(modifyProperty);
setIl.Emit(OpCodes.Ldarg_0);
setIl.Emit(OpCodes.Ldarg_1);
setIl.Emit(OpCodes.Stfld, fieldBuilder);

setIl.Emit(OpCodes.Nop);
setIl.MarkLabel(exitSet);
setIl.Emit(OpCodes.Ret);

propertyBuilder.SetGetMethod(getPropMthdBldr);
propertyBuilder.SetSetMethod(setPropMthdBldr);
}
}
How to use

public JsonResult DynamicObject()
{

Dictionary listOfFields = new Dictionary();

listOfFields.Add(“Name”, typeof(string));
listOfFields.Add(“Age”, typeof(int));
var myType = MyTypeBuilder.CompileResultType(listOfFields);
var myObject = Activator.CreateInstance(myType);

myType.GetProperty(“Name”).SetValue(myObject, “Tuan”, null);
myType.GetProperty(“Age”).SetValue(myObject, 20, null);

object name = myType.GetProperty(“Name”).GetValue(myObject);

return Json(name.ToString(), JsonRequestBehavior.AllowGet);
// return Json(myObject, JsonRequestBehavior.AllowGet);
}
Mapping data to List

public JsonResult DynamicObject2()
{
Dictionary listOfFields = new Dictionary();
listOfFields.Add(“Name”, typeof(string));
listOfFields.Add(“Age”, typeof(int));

var myType = MyTypeBuilder.CompileResultType(listOfFields);
var list = MyTypeBuilder.CreateInstanceIList(myType);
var listString = listOfFields.Select(x => x.Key).ToArray();

Type t = typeof(YourObject); // your class define
PropertyInfo[] props = t.GetProperties().Where(x => listString.Contains(x.Name)).ToArray();

var data = ListYourObjects(); // your list data

// mapping only you need
foreach (var item in data)
{
var myObject = Activator.CreateInstance(myType);
foreach (var prop in props)
{
object name = t.GetProperty(prop.Name).GetValue(item);
myType.GetProperty(prop.Name).SetValue(myObject, name, null);

}
list.Add(myObject);
}

return Json(list, JsonRequestBehavior.AllowGet);
}

T SQL Query Ultilities

— Find all Column not in Table

select name from sys.tables
where name not in
(
SELECT t.name
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE ‘IsDeleted’
)
— Deleting all duplicate rows but keeping one [duplicate]

WITH cte AS (
SELECT FirstName,
row_number() OVER(PARTITION BY FirstName ORDER BY FirstName) AS [rn]FROM Client
)
DELETE cte WHERE [rn] > 1
— Adding a column to all user tables in T-SQL

exec sp_msforeachtable ‘alter table ? add IsDeleted bit not null default 0’;

— Adding a column to all user table if not exists
EXEC sp_msforeachtable ‘
if not exists (select name from sys.tables
where name not in(SELECT t.name FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE ”IsDeleted”)
)
begin
ALTER TABLE ? ADD IsDeleted bit NOT NULL DEFAULT 0;
end’;

Upload file trong Google Apps Script

Hướng dẫn sau đây giúp bạn upload một file từ máy của hình lên thư mục trên Google Drive của bạn thông qua Google Apps Script

Code.gs

// Ham upload file, nhận vào một file input
function uploadFileToGoogleDrive(fileInput) {
/* Name of the Drive folder where the files should be saved */
var dropbox = FOLDER_NAME;
var folder,folders = DriveApp.getFoldersByName("Ten_thu_muc_cua_ban"); //getFolderById, getFoldersByName

/* Find the folder, create if the folder does not exist */
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}

/* Get the file uploaded though the form as a blob */
var file = folder.createFile(fileInput);

/* Set the file description as the name of the uploader */
//file.setDescription("Uploaded by " + form.myName);

/* Return the download URL of the file once its on Google Drive */
var fileUrl=file.getUrl();
Logger.log(fileUrl)
return fileUrl;
}


// Ham thực thi Upload file. Data là một FormId
function doUploadFile(data){

 var myFile = data.myfile;
 if(typeof myFile !== 'undefined' && myFile!=null && myFile.length>0)
 { 
 return uploadFileToGoogleDrive(myFile);
 }
 return "";
}

Code HTML

 <form name="uploadfile" enctype="multipart/form-data" id="uploadForm">
     <label>Chọn file tải lên</label>
     <input type="file" name="myfile" id="myfile" />
     <button type="button" class="btn btn-primary" onclick="return doUploadFile();">Upload</button>
</form>

Code Javascript

function doUploadFile() { 
        google.script.run           
            .doUploadFile(document.getElementById("uploadForm"));

}

 

Làm thế nào để tránh bị lừa đảo trên mạng?

Chào các bạn.

Trong thế giới phẳng ngày nay, với chiếc máy tính hay smartphone có kết nối Internet là bạn hoàn toàn có cả thế giới trong tầm tay.

Các bạn chỉ cần ngồi một chỗ, click chuột là có ngay thứ bạn muốn.

Tất cả các dịch vụ, tất cả các sản phẩm…

Trong phạm vi của bài viết này không đề cập đến lợi ích của Internet mang lại cho bạn, thực sự nó rất to lớn, nếu bạn biết cách làm chủ nó. Ở đây người viết muốn đề cập mặt trái của nó. Đó là việc lừa đảo qua mạng.

Có nhiều báo chí đã nói về vấn đề đề này, nhưng mình vẫn muốn chia sẻ lại bằng kinh nghiệm của mình.

Các bạn cũng có thể chia sẻ thêm kinh nghiệm của các bạn giúp mọi người hiểu rõ hơn.

Có nhiều hình thức lừa đảo trực tuyến khác nhau, nhưng mình chỉ muốn nói về việc lừa đảo sản phẩm, dịch vụ thu lợi bất chính, gây thiệt hại cho nạn nhân.

Lừa đảo qua mạng
Lừa đảo qua mạng

Cách nhận biết

Quảng cáo, giới thiệu sản phẩm rất tốt, giá thấp hơn thị trường nhiều lần.
Ví dụ: quần áo, giày dép, túi xách, đồng hồ, điện thoại, các khóa học…. nói chung là các sản phẩm kinh doanh online.

Đối tượng sẽ nắm bắt nhu cầu của bạn. Sau đó làm quen, giới thiệu sản phẩm, dịch vụ với giá thấp hơn giá thị trường….

Đối tượng luôn luôn muốn bạn chốt giao dịch càng sớm càng tốt, tìm cách khiến bạn thanh toán ngay. Trong khi không hề đề cập chính sách hoàn tiền cho bạn. Khi giao dịch hay dùng công cụ thanh toán điện tử như Bảo Kim, Ngân Lượng… không dùng tài khoản ngân hàng vì sợ lộ thông tin.

Lúc đầu rất chi là nhiệt tình, sau khi nhận được tiền, sẽ tìm cách trì hoãn giao dịch, hoặc giao sản phẩm kém chất lượng, không đúng cam kết.

Nếu bạn thắc mắc sẽ bị khóa kênh liên lạc, chặn số điện thoại, chặn Facebook của bạn. Không chịu hoàn tiền cho bạn.

Ai là nạn nhân?

Những bạn hay mua hàng online, những bạn mua khóa học, mua theme, mua sản phẩm số (phần mềm, website, code…)

Những bạn đang là sinh viên hay đã đi làm vẫn bị lừa như thường, vì mất cảnh giác.

Tâm lý chủ quan vì giao dịch giá trị thấp. Nhưng thưa các bạn, kẻ có chủ ý thì 1 đồng cũng lừa nhé.

Tin lời giới thiệu, nhưng lại là giới thiệu từ người nhà, nội bộ kẻ lừa đảo.

Cách phòng tránh tiền mất tật mang

Luôn tìm hiểu kỹ sản phẩm, dịch vụ mình sắp mua. Tại sao lại nó lại rẻ bất thường như vậy.

Kiểm tra thông tin người bán trên các diễn đàn uy tín, Google, bạn có thể thể tìm kiếm dựa vào số điện thoại, nick Facebook, email…

Nói chuyện với người bán, đề nghị dùng thử sản phẩm, nếu sản phẩm tốt, người bán chẳng sợ gì mà không cho bạn thử.

Nếu tiến hành giao dịch, thì kiểm tra kỹ thông tin người bán, thanh toán qua ngân hàng mà chủ tài khoản trùng tên CMND của họ.

Luôn xác nhận thông tin để tránh bị kẻ xấu lợi dụng. Chuyển tiền cho A mà sao vào B.

Nếu dùng dịch vụ điện thử, nên chọn PayPal, nó có chức năng mở tranh chấp, bạn có khả năng đòi lại được tiền.

Mọi tin nhắn, log chát, biên lai chuyển tiền phải được lưu lại, có lúc cần đòi lại quyền lợi.

Bạn cũng có thể giao dịch qua trung gian là người uy tín, nhờ giữ tiền hộ. (kiểu như trọng tài kinh tế).

Luôn luôn thật tỉnh táo trong mọi giao dịch online. Có thể hôm qua người ấy tốt, nhưng hôm nay đã khác.

Ở chiều ngược lại, người bán cũng sợ bị người mua lừa (mình từng bị) các bạn chỉ cần thay đổi vai trò trong bài viết trên, nó cũng hoàn toàn hợp lý.

Bài viết có thể chưa đầy đủ, mong các bạn chia sẻ thêm, chúc các bạn giao dịch qua mạng an toàn, thành công.