c# - C#。来自 JSON 的不正确的反序列化 bool 和 enum
问题描述
bool
我用和enum
变量序列化一个对象。
public static void task_1()
{
var _data = new Struct_Task_1()
{
_tmp_faucet_1 = StateFaucet.CLOSE,
_tmp_faucet_2 = StateFaucet.CLOSE,
_tmp_faucet_6 = false,
_tmp_faucet_4 = StateFaucet.CLOSE,
_tmp_faucet_4p = false,
_tmp_faucet_11 = false,
_tmp_faucet_11p = false,
_tmp_faucet_12 = StateFaucet.CLOSE,
_tmp_faucet_12p = false,
_tmp_faucet_SK = StateFaucet.CLOSE,
_tmp_faucet_TRK = StateFaucet.CLOSE,
_tmp_faucet_EMKV = StateFaucet.CLOSE,
_tmp_faucet_5 = StateFaucet.OPEN,
_tmp_faucet_10 = true,
_tmp_faucet_9 = true,
_tmp_faucet_3 = StateFaucet.OPEN,
_tmp_faucet_3_ap = StateFaucet.OPEN,
_tmp_faucet_BBK_1 = StateFaucet.OPEN,
_tmp_faucet_BBK_2 = StateFaucet.OPEN
};
using (StreamWriter file = File.CreateText("path.txt"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, _data);
}
}
这里反序列化代码:
public class Serialization
{
private string path;
protected Serialization(string path)
{
this.path = path;
}
protected void SerializeTask<T>(ref T StartVariables)
{
string contents = File.ReadAllText(path);
StartVariables = JsonConvert.DeserializeObject<T>(contents);
}
}
public class Struct_Task_1 : Serialization
{
public Struct_Task_1() : base("") { }
public Struct_Task_1(string path) : base(path) { }
public void Serialize(Struct_Task_1 s)
{
SerializeTask(ref s);
}
#region parameters
public StateFaucet _tmp_faucet_1 { get; set;}
public StateFaucet _tmp_faucet_2 { get; set;}
public StateFaucet _tmp_faucet_4 { get; set;}
public StateFaucet _tmp_faucet_12 { get; set;}
public StateFaucet _tmp_faucet_5 { get; set;}
public StateFaucet _tmp_faucet_3 { get; set;}
public StateFaucet _tmp_faucet_3_ap { get; set;}
public bool _tmp_faucet_6 { get; set;}
public bool _tmp_faucet_4p { get; set;}
public bool _tmp_faucet_11 { get; set;}
public bool _tmp_faucet_11p { get; set;}
public bool _tmp_faucet_12p { get; set;}
public bool _tmp_faucet_10 { get; set;}
public bool _tmp_faucet_9 { get; set;}
public StateFaucet _tmp_faucet_SK { get; set;}
public StateFaucet _tmp_faucet_TRK { get; set;}
public StateFaucet _tmp_faucet_EMKV { get; set;}
public StateFaucet _tmp_faucet_BBK_1 { get; set;}
public StateFaucet _tmp_faucet_BBK_2 { get; set;}
#endregion
}
枚举:
[DataContract]
/// <summary>
/// Состояние крана
/// </summary>
public enum StateFaucet
{
[EnumMember]
/// <summary>
/// Открыто
/// </summary>
OPEN = 0,
[EnumMember]
/// <summary>
/// Закрыто
/// </summary>
CLOSE = 1,
[EnumMember]
/// <summary>
/// Промежуточное состояние
/// </summary>
MID = 2,
[EnumMember]
/// <summary>
/// Сломано
/// </summary>
CRASH = 3
}
序列化后我有这个字符串:
{
"_tmp_faucet_1":1,
"_tmp_faucet_2":1,
"_tmp_faucet_4":1,
"_tmp_faucet_12":1,
"_tmp_faucet_5":0,
"_tmp_faucet_3":0,
"_tmp_faucet_3_ap":0,
"_tmp_faucet_6":false,
"_tmp_faucet_4p":false,
"_tmp_faucet_11":false,
"_tmp_faucet_11p":false,
"_tmp_faucet_12p":false,
"_tmp_faucet_10":true,
"_tmp_faucet_9":true,
"_tmp_faucet_SK":1,
"_tmp_faucet_TRK":1,
"_tmp_faucet_EMKV":1,
"_tmp_faucet_BBK_1":0,
"_tmp_faucet_BBK_2":0
}
但是在我反序列化这个字符串的地方,我得到了不正确的值
解决方案
我找到解决方案。我错过ref
了Serialize(Struct_Task_1 s)
方法。
public void Serialize(ref Struct_Task_1 s)
{
SerializeTask(ref s);
}
重新定义后变量s
未保存。ref
帮助保存新值。
推荐阅读
- android - 为什么 Android Studio 3 默认使用 cmake 3.6.0?
- java - 在父实体的非主键上休眠 @ManyToOne 也获取父实体
- sql - Oracle Sql 未给出结果:对 Json 数组中的 Json 对象进行计数
- erlang - 运行 rebar3 版本的库 undef 问题
- amazon-web-services - 来自 aws 无服务器反应应用程序的多个安全休息呼叫
- ace-editor - 如何在ace编辑器中编写自定义模式?
- ms-access - 表单访问:3265:在此集合中找不到项目
- c# - c#中的MultiCast委托
- c# - 使用 RegularExpressionAttribute 在 MVC 模型验证中未触发 IsValid()
- python - 在张量板中记录目录执行