我有一个将类型序列化为 Html 标记的代码块。
Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T tagBuilder.Attributes.Add("class", t.Name); foreach (PropertyInfo prop in t.GetProperties()) { object propValue = prop.GetValue(myObj, null); string stringValue = propValue != null ? propValue.ToString() : String.Empty; tagBuilder.Attributes.Add(prop.Name, stringValue); }
这很好用,除了我希望它只对原始类型执行此操作,例如int,等double,bool以及其他不是原始但可以轻松序列化的类型,例如string. 我希望它忽略其他所有内容,例如列表和其他自定义类型。
int
double
bool
string
谁能建议我如何做到这一点?或者我是否需要指定我想在某处允许的类型并打开属性的类型以查看是否允许?这有点乱,所以如果我有一个更整洁的方式会很好。
您可以使用属性Type.IsPrimitive,但要小心,因为有些类型我们可以认为是原始类型,但它们不是自动的,例如Decimal和String。
Type.IsPrimitive
Decimal
String
编辑 1: 添加了示例代码
这是一个示例代码:
if (t.IsPrimitive || t == typeof(Decimal) || t == typeof(String) || ... ) { // Is Primitive, or Decimal, or String }
编辑 2: 正如评论,还有其他类型可能您也想视为原语。我认为你必须一一添加这种 变化 。
编辑 3: IsPrimitive = (Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single), 要检查的花药原始类型 (t == typeof(DateTime ))