添加序列化及序列化的自定义命名无效的情况

develop
bicijinlian 7 years ago
parent b816504dbe
commit 6113625857

@ -4,4 +4,8 @@
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>
</Project>

@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
namespace TupleStudy
{
/// <summary>
@ -39,7 +41,7 @@ namespace TupleStudy
/// <summary>
/// 创建2元素的值元组
/// </summary>
public ValueTuple<T1,T2> CreateValueTuple<T1,T2>(T1 value1, T2 value2)
public ValueTuple<T1, T2> CreateValueTuple<T1, T2>(T1 value1, T2 value2)
{
var tuple = new ValueTuple<T1, T2>(value1, value2);
@ -89,7 +91,7 @@ namespace TupleStudy
/// <summary>
/// 创建7元素的值元组
/// </summary>
public ValueTuple<T1, T2, T3, T4, T5, T6, T7> CreateValueTuple<T1, T2, T3, T4,T5,T6,T7>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7)
public ValueTuple<T1, T2, T3, T4, T5, T6, T7> CreateValueTuple<T1, T2, T3, T4, T5, T6, T7>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7)
{
var tuple = new ValueTuple<T1, T2, T3, T4, T5, T6, T7>(value1, value2, value3, value4, value5, value6, value7);
@ -184,7 +186,7 @@ namespace TupleStudy
/// <summary>
/// 创建8元素的值元组
/// </summary>
public (T1, T2, T3, T4, T5, T6, T7, TRest) GetValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(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, T2, T3, T4, T5, T6, T7, TRest>(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;
}
/// <summary>
/// 解决方法:转换成匿名类
/// 不太优雅的方案,目前只能如此。
/// </summary>
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
}
}

@ -34,6 +34,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
<package id="xunit" version="2.2.0" targetFramework="net461" />
<package id="xunit.abstractions" version="2.0.1" targetFramework="net461" />

@ -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);
}
/// <summary>
@ -312,13 +318,34 @@ namespace ValueTupleStudyTest
}
/// <summary>
/// Git-Flow 补丁测试
/// 注意序列化后自定义名字无效仍然使用Item1 等
/// </summary>
[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
}
}

@ -34,6 +34,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net47" />
<package id="xunit" version="2.4.0" targetFramework="net47" />
<package id="xunit.abstractions" version="2.0.2" targetFramework="net47" />
<package id="xunit.analyzers" version="0.10.0" targetFramework="net47" />

Loading…
Cancel
Save