GVKun编程网logo

C# null值

7

对于C#null值感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于c#–如何将NullableDateTime变量的null值转换为DbNull.Value、C#Where子句不会从可为null

对于C# null值感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value、C#Where子句不会从可为null的布尔中返回null值、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、fastjson 处理null值,对象为null时返回{},数字为null返回[]的有用信息。

本文目录一览:

C# null值

C# null值

using System;

namespace CalculatorApplication {

   class NullablesAtShow {

      static void Main(string[] args) {
         int? num1 = null;
         int? num2 = 45;
         double? num3 = new double?();
         double? num4 = 3.14157;

         bool? boolval = new bool?();

         // display the values
         Console.WriteLine(Nullables at Show: {0}, {1}, {2}, {3}, num1, num2, num3, num4);
         Console.WriteLine(A Nullable boolean value: {0}, boolval);
         Console.ReadLine();
      }
   }
}

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

我有一个可以为空的DateTime变量.我想把它写到sql DB.当我尝试插入时:

如果变量有值,则没有问题.

但如果它没有值,则插入中断错误.

我想问:我们如何通过DbCommand参数将可空的DateTime插入sql?

(P.S.:sql列也可以为空.)

DateTime? myDate = null;
DbCommand dbCommand = new DbCommand();
dbCommand.Parameters.Add("NullablesqlDateField",DbType.DateTime,myDate);

解决方法

试试 null coalescing operator:

dbCommand.Parameters.Add("NullablesqlDateField",(object) myDate ?? dbnull.Value);

C#Where子句不会从可为null的布尔中返回null值

C#Where子句不会从可为null的布尔中返回null值

Reproduced this with SQL server.
Added your Material class. Correction to you keys were made.
The HasValue as stated was fine. Also Convert.ToBoolean helped with translation. 
Some options for various results have been provided.
 

       [HttpGet]  
       public IActionResult GetNulls()
       {
           List<Material> mats = new List<Material>
           {
               new Material { MaterialID = 1,StockQty = 10,FlagForDelete = true },               new Material { MaterialID = 2,StockQty = 20,FlagForDelete = false },               new Material { MaterialID = 3,StockQty = 30 }
           };
           string Response = "SUCCESS:";
           try
           {
               List<Material> NotFalse = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(false)).ToList();
               List<Material> NotTrue = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(true)).ToList();
               List<Material> NotEither = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(true) &&  m.FlagForDelete != Convert.ToBoolean(false)).ToList();
               List<Material> Lakemann = mats.Where(m => !m.FlagForDelete.HasValue).ToList();
               var combine = new { NotFalse,NotTrue,NotEither,Lakemann };
               var options = new JsonSerializerOptions { WriteIndented = true };
               string json = JsonSerializer.Serialize(combine,options);
               return Ok(json);
           }
           catch (Exception ex)
           {Response = "ERROR: **" + ex.Message;}
           finally
           {};
           return NoContent();
       }

JSON
{
  "NotFalse": [
    {
      "MaterialID": 1,      "StockQty": 10,      "FlagForDelete": true
    },    {
      "MaterialID": 3,      "StockQty": 30,      "FlagForDelete": null
    }
  ],  "NotTrue": [
    {
      "MaterialID": 2,      "StockQty": 20,      "FlagForDelete": false
    },  "NotEither": [
    {
      "MaterialID": 3,  "Lakemann": [
    {
      "MaterialID": 3,      "FlagForDelete": null
    }
  ]
}


,

在C#中,可以为null的布尔列将映射到bool?;

...Where(ffd => ffd.FlagForDelete == false);
...Where(ffd => !ffd.FlagForDelete.HasValue);

failed to parse: {

failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8

IDEA整合springboot与neo4j时出现这个问题

fastjson 处理null值,对象为null时返回{},数字为null返回[]

fastjson 处理null值,对象为null时返回{},数字为null返回[]

针对这一情况。

我用的json转换工具是fastjson,网上查知fastjson 有ValueFilter接口可以实现自定义过滤

package com.alibaba.fastjson.serializer;

public interface ValueFilter extends SerializeFilter {

    Object process(Object object, String name, Object value);
}

知道接口后就简单了。

process(Object object, String name, Object value) //三个参数,object 为要转成json的对象,name是对象的get/is方法的名字(去掉get或is前缀并首字母小写),value就是对应的get值

//思路就是通过object 和 name 反射方法得出 其return的类型。针对value== null 的基础数据类型的或者list的类型的做出不同处理
//实现的部分代码  (PS:时间类型 我也算到基础类型了。)
	private static String[] types = {"java.lang.Integer",  
	        "java.lang.Double",  
	        "java.lang.Float",  
	        "java.lang.Long",  
	        "java.lang.Short",  
	        "java.lang.Byte",  
	        "java.lang.Boolean",  
	        "java.lang.Char",  
	        "java.lang.String",
	        "java.util.Date",
	        "int","double","long","short","byte","boolean","char","float"};
	
	
	private static String first2Up(String str){
		 return str.substring(0,1).toUpperCase()+str.substring(1);
	}
	
	private static ValueFilter nullValueFilter = new ValueFilter(){
		@Override
		public Object process(Object object, String name, Object value) {
			if(value==null){
	    		try {
		    		Method method = object.getClass().getDeclaredMethod("get" + first2Up(name));
		    		
		    		for(String type : types){
		    			if(method.getReturnType().getName().equals(type)){
							return "";
						}
		    		}
		    		
		    		if (method.getReturnType().isAssignableFrom(List.class) &&
		    				!method.getReturnType().getName().equals("java.lang.Object")) {
		    			return new int[0];
					}
		    		
		    		return new Object();
					
				} catch (SecurityException | NoSuchMethodException e) {
					e.printStackTrace();
					return value;
				}
	    	}
		    return value;
		}
		
	};

	private static String dateFormat = "yyyy-MM-dd HH:mm:ss";
	private static SerializeConfig mapping = new SerializeConfig(); 
	static{
		mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
	}
    //只是部分代码,有些数字类型,也需要加上引号 过滤的对象是notNullValueFilter,原理一样,就不贴出来了,mapping是对日期的格式化方法
	public static String toJsonString(Object obj){
		SerializeFilter[] filters = {nullValueFilter,notNullValueFilter};
		return JSON.toJSONString(obj,mapping, filters);
	}


附上原先的json接口转换方法,希望能抛砖引玉

public String object2Json(Object object) throws IOException {
		if (!objectUtil.isNotEmpty(object)) {
			return "";
		}
		ObjectMapper mapper = JacksonMapper.getInstance();
		
		// 字段和值都加引号  
		mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); 
        
		//数字加引号
		mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true);
		mapper.configure(JsonGenerator.Feature.QUOTE_NON_NUMERIC_NUMBERS, true);
	        
		
		mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()  
        {  
            public void serialize(  
                    Object value,  
                    JsonGenerator jg,  
                    SerializerProvider sp) throws IOException, JsonProcessingException  
            {  
                jg.writeString("");  
            }
        });  
		return mapper.writeValueAsString(object);
	}



我们今天的关于C# null值的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value、C#Where子句不会从可为null的布尔中返回null值、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、fastjson 处理null值,对象为null时返回{},数字为null返回[]的相关信息,请在本站查询。

本文标签: