C# 如何从对象和变量创建Json?
我有一个对象类,它具有以下变量:C# 如何从对象和变量创建Json?,c#,json,C#,Json,我有一个对象类,它具有以下变量: class empleado { public string nombre = "Nicolas"; public string apellido = "Flores"; public int edad= 22; } 我可以用这行代码生成Json: string jsonResult = JsonConvert.SerializeObject(empleado); 但是对于生成的json,我想添加除对象之外的其他数据,我该怎么做呢?您
class empleado
{
public string nombre = "Nicolas";
public string apellido = "Flores";
public int edad= 22;
}
我可以用这行代码生成Json:
string jsonResult = JsonConvert.SerializeObject(empleado);
但是对于生成的json,我想添加除对象之外的其他数据,我该怎么做呢?您可以使用匿名类型
var o = new {
P1 = "X",
P2 = 2,
empleado.nombre,
empleado.apellido,
empleado.edad
};
string jsonResult = JsonConvert.SerializeObject (o);
或
您可以使用匿名类型
var o = new {
P1 = "X",
P2 = 2,
empleado.nombre,
empleado.apellido,
empleado.edad
};
string jsonResult = JsonConvert.SerializeObject (o);
或
我喜欢的两种方法是: 1) 在与序列化相同的文件中创建一个新类(或者在任何需要的地方,但我喜欢将自定义项保留在与请求代码相同的文件中,除非它是可重用的),该类包含empleado中的所有字段,并向其中添加所需的任何其他字段。例如:
class customempleado
{
public string nombre = "Nicolas";
public string apellido = "Flores";
public int edad= 22;
public string moredata1 = "More data 1";
public string moredata2 = "More data 2";
}
2) 序列化匿名对象并向其添加类和新数据。例如:
string jsonResult = JsonConvert.SerializeObject ( new { nombre = "Nicolas", apellido = "Flores", edad = 22, moredata1 = "More data", moredata2 = moredata2 });
我喜欢的两种方法是: 1) 在与序列化相同的文件中创建一个新类(或者在任何需要的地方,但我喜欢将自定义项保留在与请求代码相同的文件中,除非它是可重用的),该类包含empleado中的所有字段,并向其中添加所需的任何其他字段。例如:
class customempleado
{
public string nombre = "Nicolas";
public string apellido = "Flores";
public int edad= 22;
public string moredata1 = "More data 1";
public string moredata2 = "More data 2";
}
2) 序列化匿名对象并向其添加类和新数据。例如:
string jsonResult = JsonConvert.SerializeObject ( new { nombre = "Nicolas", apellido = "Flores", edad = 22, moredata1 = "More data", moredata2 = moredata2 });
作为另一种方法,您可以像这样保留一个单独的模型。因此,您可以将您的empleado对象和其他属性分配给它,然后将其转换为Json对象
class MyJsonObjectModel
{
public string otherProperty1 = "My string 1";
public string otherProperty2 = "My string 2";
public int otherProperty3 = "1";
public empleado empleadoModel;
}
string jsonResult = JsonConvert.SerializeObject(MyJsonObjectModel);
作为另一种方法,您可以像这样保留一个单独的模型。因此,您可以将您的empleado对象和其他属性分配给它,然后将其转换为Json对象
class MyJsonObjectModel
{
public string otherProperty1 = "My string 1";
public string otherProperty2 = "My string 2";
public int otherProperty3 = "1";
public empleado empleadoModel;
}
string jsonResult = JsonConvert.SerializeObject(MyJsonObjectModel);
以下是对反序列化JSON对象执行所有CRUD类型操作的一种方法:
public static void ManipulateJsonObject()
{
string json =
@"{
""empleado"": {
""nombre"": ""My nombre"",
""apellido"": ""My apellido"",
""edad"": 1
}
}";
JObject baseJObject = JObject.Parse(json);
System.Diagnostics.Trace.WriteLine("JObject before modifications, just after parse:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Get node with name 'empleado'
JObject empleadoNode = (JObject)baseJObject["empleado"];
// Create new property 'afterNombre'
empleadoNode.Property("nombre").AddAfterSelf(new JProperty("afterNombre", "new nombre value"));
System.Diagnostics.Trace.WriteLine("Observe newly added property 'afterNobre':");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Read value of new property 'afterNombre'
string empleadoValue = (string) empleadoNode["afterNombre"];
// Throws exception if value was not set
if(string.IsNullOrWhiteSpace(empleadoValue))
throw new Exception("Adding or Reading new property failed");
// Update value of existing property 'edad'
empleadoNode["edad"] = 3;
System.Diagnostics.Trace.WriteLine("Observe newly property 'edad' has been updated:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Delete newly added property 'afterNombre'
empleadoNode.Property("afterNombre").Remove();
System.Diagnostics.Trace.WriteLine("Observe property 'afterNobre' has been deleted:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Output final object
System.Diagnostics.Trace.WriteLine("Final state of JObject:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
}
有关每次操作后的检查结果,请参见visual studio输出窗口。以下是对反序列化JSON对象执行所有CRUD类型操作的一种方法:
public static void ManipulateJsonObject()
{
string json =
@"{
""empleado"": {
""nombre"": ""My nombre"",
""apellido"": ""My apellido"",
""edad"": 1
}
}";
JObject baseJObject = JObject.Parse(json);
System.Diagnostics.Trace.WriteLine("JObject before modifications, just after parse:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Get node with name 'empleado'
JObject empleadoNode = (JObject)baseJObject["empleado"];
// Create new property 'afterNombre'
empleadoNode.Property("nombre").AddAfterSelf(new JProperty("afterNombre", "new nombre value"));
System.Diagnostics.Trace.WriteLine("Observe newly added property 'afterNobre':");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Read value of new property 'afterNombre'
string empleadoValue = (string) empleadoNode["afterNombre"];
// Throws exception if value was not set
if(string.IsNullOrWhiteSpace(empleadoValue))
throw new Exception("Adding or Reading new property failed");
// Update value of existing property 'edad'
empleadoNode["edad"] = 3;
System.Diagnostics.Trace.WriteLine("Observe newly property 'edad' has been updated:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Delete newly added property 'afterNombre'
empleadoNode.Property("afterNombre").Remove();
System.Diagnostics.Trace.WriteLine("Observe property 'afterNobre' has been deleted:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
// Output final object
System.Diagnostics.Trace.WriteLine("Final state of JObject:");
System.Diagnostics.Trace.WriteLine(baseJObject.ToString());
}
查看visual studio输出窗口以了解每次操作后的检查结果。您不想将新属性添加到
empleado
类中,是吗?使用属性还是将这些字段与JSONpropoEntry一起添加attribute@Yeheshuah对我不想添加更多属性,因为我想显示employee对象的列表,然后向该JSONY添加一些属性或消息您不想向Employedo
类添加新属性,是吗?使用属性或将这些字段与JsonPropoerty一起添加attribute@Yeheshuah对我不想添加更多属性,因为我想显示employee对象的列表,然后向该JSONBTW添加一些属性或消息。这使用Json.NET,但对于记录,从.NET Core 3.0 System.Text.Json.Json序列化器不序列化字段(与属性相反)。顺便说一句,这使用Json.NET,但对于记录,从.NET Core 3.0 System.Text.Json.Json序列化器不序列化字段(与属性相反)。这使用Json.NET,但对于记录,从.NET Core 3.0 System.Text.Json.JsonSerializer开始不序列化字段(与属性相反)。顺便说一句,它使用Json.NET,但作为记录,从.NET Core 3.0 System.Text.Json.JsonSerializer开始不序列化字段(与属性相反)