diff --git a/TupleStudy/TupleStudy.csproj b/TupleStudy/TupleStudy.csproj index 9f5c4f4..afada82 100644 --- a/TupleStudy/TupleStudy.csproj +++ b/TupleStudy/TupleStudy.csproj @@ -4,4 +4,8 @@ netstandard2.0 + + + + diff --git a/TupleStudy/ValueTupleStudy.cs b/TupleStudy/ValueTupleStudy.cs index b2fddb3..21dbf59 100644 --- a/TupleStudy/ValueTupleStudy.cs +++ b/TupleStudy/ValueTupleStudy.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Text; +using Newtonsoft.Json; + namespace TupleStudy { /// @@ -39,7 +41,7 @@ namespace TupleStudy /// /// 创建2元素的值元组 /// - public ValueTuple CreateValueTuple(T1 value1, T2 value2) + public ValueTuple CreateValueTuple(T1 value1, T2 value2) { var tuple = new ValueTuple(value1, value2); @@ -89,7 +91,7 @@ namespace TupleStudy /// /// 创建7元素的值元组 /// - public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7) + public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7) { var tuple = new ValueTuple(value1, value2, value3, value4, value5, value6, value7); @@ -184,7 +186,7 @@ namespace TupleStudy /// /// 创建8元素的值元组 /// - public (T1, T2, T3, T4, T5, T6, T7, TRest) GetValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest item8) where TRest:struct + public (T1, T2, T3, T4, T5, T6, T7, TRest) GetValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest item8) where TRest : struct { var tuple = ValueTuple.Create(item1, item2, item3, item4, item5, item6, item7, item8); return tuple; @@ -204,7 +206,7 @@ namespace TupleStudy //回为函数返回值已经重命名,创建时再次命名已没有意义 //return (userId: 1, userName: "wanggaofeng", userAge: 18); - return (1, "王高峰",18); + return (1, "王高峰", 18); } #endregion @@ -254,5 +256,31 @@ namespace TupleStudy } } #endregion + + #region 序列化问题 + public string GetValueTupleJson() + { + var student = (userId: 1, userName: "wanggaofeng", userAge: 18); + var json = JsonConvert.SerializeObject(student); + return json; + } + + /// + /// 解决方法:转换成匿名类 + /// 不太优雅的方案,目前只能如此。 + /// + public string GetValueTupleJsonSolve() + { + var student = (userId: 1, userName: "wanggaofeng", userAge: 18); + var anonymous = new + { + userId = student.userId, + userName = student.userName, + userAge = student.userAge, + }; + var json = JsonConvert.SerializeObject(anonymous); + return json; + } + #endregion } } diff --git a/TupleStudyTest/TupleStudyTest.csproj b/TupleStudyTest/TupleStudyTest.csproj index 453b610..9426566 100644 --- a/TupleStudyTest/TupleStudyTest.csproj +++ b/TupleStudyTest/TupleStudyTest.csproj @@ -34,6 +34,9 @@ 4 + + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + diff --git a/TupleStudyTest/packages.config b/TupleStudyTest/packages.config index f98995b..a32d6c2 100644 --- a/TupleStudyTest/packages.config +++ b/TupleStudyTest/packages.config @@ -1,5 +1,6 @@  + diff --git a/ValueTupleStudyTest/ValueTupleStudyTest.cs b/ValueTupleStudyTest/ValueTupleStudyTest.cs index 582a541..3576f8c 100644 --- a/ValueTupleStudyTest/ValueTupleStudyTest.cs +++ b/ValueTupleStudyTest/ValueTupleStudyTest.cs @@ -204,6 +204,12 @@ namespace ValueTupleStudyTest Assert.Equal(1, id); Assert.Equal("wanggaofeng", name); Assert.Equal(18, age); + + //声明为变量:类型 + 变量 + (int myId, string myName, int myAge) student = ValueTuple.Create(1, "wanggaofeng", 18); + Assert.Equal(1, student.myId); + Assert.Equal("wanggaofeng", student.myName); + Assert.Equal(18, student.myAge); } /// @@ -312,13 +318,34 @@ namespace ValueTupleStudyTest } /// - /// Git-Flow 补丁测试 + /// 注意:序列化后,自定义名字无效,仍然使用Item1 等 /// [Fact] - public void Hotfix_Test() + public void ValueTupleToJson_Test() { - Assert.True(1 == 1); + var json = valueTupleStudy.GetValueTupleJson(); + + Assert.Contains("Item1", json); + Assert.Contains("Item2", json); + Assert.Contains("Item3", json); + + Assert.DoesNotContain("userId", json); + Assert.DoesNotContain("userName", json); + Assert.DoesNotContain("userAge", json); + } + + [Fact] + public void ValueTupleToJson_Solve_Test() + { + var json = valueTupleStudy.GetValueTupleJsonSolve(); + + Assert.DoesNotContain("Item1", json); + Assert.DoesNotContain("Item2", json); + Assert.DoesNotContain("Item3", json); + + Assert.Contains("userId", json); + Assert.Contains("userName", json); + Assert.Contains("userAge", json); } - //发布v1.0 } } diff --git a/ValueTupleStudyTest/ValueTupleStudyTest.csproj b/ValueTupleStudyTest/ValueTupleStudyTest.csproj index dee134a..049070e 100644 --- a/ValueTupleStudyTest/ValueTupleStudyTest.csproj +++ b/ValueTupleStudyTest/ValueTupleStudyTest.csproj @@ -34,6 +34,9 @@ 4 + + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + diff --git a/ValueTupleStudyTest/packages.config b/ValueTupleStudyTest/packages.config index 5d9b8dc..3863694 100644 --- a/ValueTupleStudyTest/packages.config +++ b/ValueTupleStudyTest/packages.config @@ -1,5 +1,6 @@  +