NewLife/X

JsonWriter支持忽略控制和忽略只读属性
大石头 编写于 2020-01-09 14:54:02
共计: 修改1个文件,增加15行、删除10行。
修改 +15 -10
修改 +15 -10
diff --git a/NewLife.Core/Serialization/Json/JsonWriter.cs b/NewLife.Core/Serialization/Json/JsonWriter.cs
index 49612f3..6272208 100644
--- a/NewLife.Core/Serialization/Json/JsonWriter.cs
+++ b/NewLife.Core/Serialization/Json/JsonWriter.cs
@@ -21,8 +21,11 @@ namespace NewLife.Serialization
         /// <summary>使用驼峰命名</summary>
         public Boolean CamelCase { get; set; }
 
-        /// <summary>写入空值。默认true</summary>
-        public Boolean NullValue { get; set; } = true;
+        /// <summary>忽略空值。默认false</summary>
+        public Boolean IgnoreNullValues { get; set; } 
+
+        /// <summary>忽略只读属性。默认false</summary>
+        public Boolean IgnoreReadOnlyProperties { get; set; }
 
         /// <summary>枚举使用字符串。默认false使用数字</summary>
         public Boolean EnumString { get; set; }
@@ -49,7 +52,7 @@ namespace NewLife.Serialization
         {
             var jw = new JsonWriter
             {
-                NullValue = nullValue,
+                IgnoreNullValues = !nullValue,
                 CamelCase = camelCase
             };
 
@@ -142,7 +145,7 @@ namespace NewLife.Serialization
 
             foreach (String item in nvs)
             {
-                if (NullValue || !IsNull(nvs[item]))
+                if (!IgnoreNullValues || !IsNull(nvs[item]))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;
@@ -162,7 +165,7 @@ namespace NewLife.Serialization
 
             foreach (DictionaryEntry item in dic)
             {
-                if (NullValue || !IsNull(item.Value))
+                if (!IgnoreNullValues || !IsNull(item.Value))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;
@@ -201,7 +204,7 @@ namespace NewLife.Serialization
         private Dictionary<Object, Int32> _cirobj = new Dictionary<Object, Int32>();
         private void WriteObject(Object obj)
         {
-            if (!_cirobj.TryGetValue(obj, out var i)) _cirobj.Add(obj, _cirobj.Count + 1);
+            if (!_cirobj.TryGetValue(obj, out _)) _cirobj.Add(obj, _cirobj.Count + 1);
 
             _Builder.Append('{');
             _depth++;
@@ -212,8 +215,10 @@ namespace NewLife.Serialization
             var first = true;
             foreach (var pi in t.GetProperties(true))
             {
+                if (IgnoreReadOnlyProperties && pi.CanRead && !pi.CanWrite) continue;
+
                 var value = obj.GetValue(pi);
-                if (NullValue || !IsNull(value))
+                if (!IgnoreNullValues || !IsNull(value))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;
@@ -268,7 +273,7 @@ namespace NewLife.Serialization
             var first = true;
             foreach (DictionaryEntry item in dic)
             {
-                if (NullValue || !IsNull(item.Value))
+                if (!IgnoreNullValues || !IsNull(item.Value))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;
@@ -287,7 +292,7 @@ namespace NewLife.Serialization
             var first = true;
             foreach (var item in dic)
             {
-                if (NullValue || !IsNull(item.Value))
+                if (!IgnoreNullValues || !IsNull(item.Value))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;
@@ -306,7 +311,7 @@ namespace NewLife.Serialization
             var first = true;
             foreach (DictionaryEntry entry in dic)
             {
-                if (NullValue || !IsNull(entry.Value))
+                if (!IgnoreNullValues || !IsNull(entry.Value))
                 {
                     if (!first) _Builder.Append(',');
                     first = false;