diff --git a/NewLife.Core/Serialization/Json/JsonParser.cs b/NewLife.Core/Serialization/Json/JsonParser.cs
index c0f0391..a67ab98 100644
--- a/NewLife.Core/Serialization/Json/JsonParser.cs
+++ b/NewLife.Core/Serialization/Json/JsonParser.cs
@@ -399,7 +399,10 @@ namespace NewLife.Serialization
return Double.Parse(s, NumberFormatInfo.InvariantInfo);
}
- return CreateLong(out var num, _json, startIndex, index - startIndex);
+ var m = CreateLong(out _, _json, startIndex, index - startIndex);
+ if (m < Int32.MaxValue && m > Int32.MinValue) return (Int32)m;
+
+ return m;
}
private Token LookAhead()
diff --git a/NewLife.Core/Serialization/Json/JsonWriter.cs b/NewLife.Core/Serialization/Json/JsonWriter.cs
index e7c73f3..49612f3 100644
--- a/NewLife.Core/Serialization/Json/JsonWriter.cs
+++ b/NewLife.Core/Serialization/Json/JsonWriter.cs
@@ -24,6 +24,9 @@ namespace NewLife.Serialization
/// <summary>写入空值。默认true</summary>
public Boolean NullValue { get; set; } = true;
+ /// <summary>枚举使用字符串。默认false使用数字</summary>
+ public Boolean EnumString { get; set; }
+
/// <summary>最大序列化深度。默认5</summary>
public Int32 MaxDepth { get; set; } = 5;
@@ -32,10 +35,7 @@ namespace NewLife.Serialization
#region 构造
/// <summary>实例化</summary>
- public JsonWriter()
- {
- UseUTCDateTime = false;
- }
+ public JsonWriter() { }
#endregion
#region 静态转换
@@ -63,6 +63,14 @@ namespace NewLife.Serialization
#endregion
#region 写入方法
+ /// <summary>写入对象</summary>
+ /// <param name="value"></param>
+ public void Write(Object value) => WriteValue(value);
+
+ /// <summary>获取结果</summary>
+ /// <returns></returns>
+ public String GetString() => _Builder.ToString();
+
private void WriteValue(Object obj)
{
if (obj == null || obj is DBNull)
@@ -115,7 +123,12 @@ namespace NewLife.Serialization
WriteArray((IEnumerable)obj);
else if (obj is Enum)
- WriteValue(Convert.ToInt32(obj));
+ {
+ if (EnumString)
+ WriteValue(obj + "");
+ else
+ WriteValue(Convert.ToInt32(obj));
+ }
else
WriteObject(obj);
@@ -171,7 +184,12 @@ namespace NewLife.Serialization
if (dt.Year > 1000)
{
if (dt.Hour == 0 && dt.Minute == 0 && dt.Second == 0)
+ {
str = dt.ToString("yyyy-MM-dd");
+
+ // 处理UTC
+ if (dt.Kind == DateTimeKind.Utc) str += " UTC";
+ }
else
str = dt.ToFullString();
}
diff --git a/XUnitTest.Core/Json/JsonWriterTests.cs b/XUnitTest.Core/Json/JsonWriterTests.cs
new file mode 100644
index 0000000..94c5272
--- /dev/null
+++ b/XUnitTest.Core/Json/JsonWriterTests.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NewLife.Log;
+using NewLife.Serialization;
+using Xunit;
+
+namespace XUnitTest.Json
+{
+ public class JsonWriterTests
+ {
+ [Fact]
+ public void UtcTest()
+ {
+ var writer = new JsonWriter();
+
+ var dt = DateTime.UtcNow;
+ writer.Write(new { time = dt });
+
+ var str = writer.GetString();
+ Assert.NotEmpty(str);
+
+ var js = new JsonParser(str);
+ var dic = js.Decode() as IDictionary<String, Object>;
+ Assert.NotNull(dic);
+
+ var str2 = dic["time"];
+ Assert.Equal(dt.ToFullString(), str2);
+
+ var dt2 = dic["time"].ToDateTime();
+ Assert.Equal(dt.Trim(), dt2.Trim());
+ }
+
+ [Fact]
+ public void EnumTest()
+ {
+ // 字符串
+ var writer = new JsonWriter { EnumString = true };
+
+ var data = new { Level = LogLevel.Fatal };
+ writer.Write(data);
+
+ var js = new JsonParser(writer.GetString());
+ var dic = js.Decode() as IDictionary<String, Object>;
+ Assert.NotNull(dic);
+
+ var str2 = dic["Level"];
+ Assert.Equal("Fatal", str2);
+
+ // 数字
+ var writer2 = new JsonWriter { EnumString = false };
+
+ writer2.Write(data);
+
+ var js2 = new JsonParser(writer2.GetString());
+ var dic2 = js2.Decode() as IDictionary<String, Object>;
+ Assert.NotNull(dic2);
+
+ Assert.Equal(5, dic2["Level"]);
+ Assert.Equal((Int32)LogLevel.Fatal, dic2["Level"].ToInt());
+ }
+ }
+}
\ No newline at end of file
diff --git a/XUnitTest.Core/PropertyInfo.cs b/XUnitTest.Core/PropertyInfo.cs
index 748bca7..53a4c48 100644
--- a/XUnitTest.Core/PropertyInfo.cs
+++ b/XUnitTest.Core/PropertyInfo.cs
@@ -3,4 +3,4 @@ using System.Collections.Generic;
using System.Text;
using Xunit;
-[assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")]
\ No newline at end of file
+//[assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")]
\ No newline at end of file
diff --git a/XUnitTest.Core/Remoting/ApiTest.cs b/XUnitTest.Core/Remoting/ApiTest.cs
index 69106a9..07437d0 100644
--- a/XUnitTest.Core/Remoting/ApiTest.cs
+++ b/XUnitTest.Core/Remoting/ApiTest.cs
@@ -7,7 +7,7 @@ using NewLife.Net;
using NewLife.Remoting;
using NewLife.Security;
using Xunit;
-using Xunit.Extensions.Ordering;
+//using Xunit.Extensions.Ordering;
namespace XUnitTest.Remoting
{
@@ -41,7 +41,7 @@ namespace XUnitTest.Remoting
_Server.TryDispose();
}
- [Order(1)]
+ //[Order(1)]
[Fact(DisplayName = "基础Api测试")]
public async void BasicTest()
{
@@ -59,7 +59,7 @@ namespace XUnitTest.Remoting
Assert.Equal("Packet Api/Info2(Packet state)", apis[2]);
}
- [Order(2)]
+ //[Order(2)]
[Theory(DisplayName = "参数测试")]
[InlineData("12345678", "ABCDEFG")]
[InlineData("ABCDEFG", "12345678")]
@@ -82,7 +82,7 @@ namespace XUnitTest.Remoting
Assert.Null(infs["state2"]);
}
- [Order(3)]
+ //[Order(3)]
[Fact(DisplayName = "二进制测试")]
public async void Info2Test()
{
@@ -99,7 +99,7 @@ namespace XUnitTest.Remoting
Assert.Equal(buf, pk.Slice(pk.Total - buf.Length, -1).ToArray());
}
- [Order(4)]
+ //[Order(4)]
[Fact(DisplayName = "异常请求")]
public async void ErrorTest()
{
diff --git a/XUnitTest.Core/XUnitTest.Core.csproj b/XUnitTest.Core/XUnitTest.Core.csproj
index cdcb7cc..c9c9781 100644
--- a/XUnitTest.Core/XUnitTest.Core.csproj
+++ b/XUnitTest.Core/XUnitTest.Core.csproj
@@ -11,7 +11,6 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="Moq" Version="4.13.1" />
<PackageReference Include="xunit" Version="2.4.1" />
- <PackageReference Include="Xunit.Extensions.Ordering" Version="1.4.5" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
diff --git a/XUnitTest.XCode/XUnitTest.XCode.csproj b/XUnitTest.XCode/XUnitTest.XCode.csproj
index 306d802..a048fb5 100644
--- a/XUnitTest.XCode/XUnitTest.XCode.csproj
+++ b/XUnitTest.XCode/XUnitTest.XCode.csproj
@@ -4,9 +4,12 @@
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
- <PackageReference Include="xunit" Version="2.4.0" />
- <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
+ <PackageReference Include="xunit" Version="2.4.1" />
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
+ <PrivateAssets>all</PrivateAssets>
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ </PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NewLife.Core\NewLife.Core.csproj" />