Я извлекаю JSON из базы данных и пытаюсь десериализовать его обратно в объект. Но объяснено ниже, он теряет свойства объекта после десериализации.
Мой код:
using (SqlConnection conn = new SqlConnection(PartsDatabase.connString)) {
string query = @"SELECT [JSON] FROM parts WHERE [Id] = @id";
using (SqlCommand sqlcommand = new SqlCommand(query, conn)) {
sqlcommand.Connection = conn;
conn.Open();
sqlcommand.Parameters.AddWithValue("@id", id);
MessageBox.Show(sqlcommand.ExecuteScalar().ToString());
Part p = JsonConvert.DeserializeObject<Part>(sqlcommand.ExecuteScalar().ToString());
MessageBox.Show(PartsDatabase.DisplayObjectInfo(p));
tb_PartNumber.Text = p.GetPartNumber();
cmb_revision.SelectedIndex = cmb_revision.FindString(p.GetRevision());
tb_partName.Text = p.GetPartName();
tb_workOrder.Text = p.GetWorkOrder();
tb_serialNo.Text = p.GetSerialNumber();
conn.Close();
}
}
Выход из MessageBox.Show(sqlcommand.ExecuteScalar().ToString());
:
{"PartNumber":"20584","PartName":"FOO, BAR","Revision":"0","SerialNumber":"11111","WorkOrder":"22222"}
Вывод из моего метода отладки MessageBox.Show(PartsDatabase.DisplayObjectInfo(p));
:
System.String PartNumber =
System.String Revision = 0
System.String PartName = FOO, BAR
System.String WorkOrder = 22222
System.String SerialNumber = 11111
My Part
class
using System;
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace PartsDatabase {
[Serializable]
public class Part {
[DataMember]
public string PartNumber { get; private set; }
[DataMember]
public string PartName { get; private set; }
[DataMember]
public string Revision { get; private set; }
[DataMember]
public string SerialNumber { get; private set; }
[DataMember]
public string WorkOrder { get; private set; }
public string GetPartNumber() {
return PartNumber;
}
public void SetPartNumber(string value) {
PartNumber = value;
}
public string GetPartName() {
return PartName;
}
public void SetPartName(string value) {
PartName = value;
}
public string GetRevision() {
return Revision;
}
public void SetRevision(string value) {
Revision = value;
}
public string GetSerialNumber() {
return SerialNumber;
}
public void SetSerialNumber(string value) {
SerialNumber = value;
}
public string GetWorkOrder() {
return WorkOrder;
}
public void SetWorkOrder(string value) {
WorkOrder = value;
}
[JsonConstructor]
public Part(string workOrder, string partNumber, string revision, string partName, string serialNumber) {
WorkOrder = workOrder;
PartNumber = partNumber;
Revision = revision;
PartName = partName;
SerialNumber = serialNumber;
}
}
}
Мой метод сериализации:
public static string serialize(Part p) {
return JsonConvert.SerializeObject(p);
}
Вы видите, что он теряет PartNumber после метода десериализации. Вызов Console.WriteLine(p.GetPartNumber());
выведет пустую строку. Что может быть не так? PartNumber - не единственное свойство, которое теряет объект, но мне пришлось усечь его для этого вопроса. Он теряет некоторые свойства, но не другие. Тем не менее, это соответствует, то есть это всегда одни и те же свойства, которые не могут десериализовать. Спасибо!