Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从对象和变量创建Json?_C#_Json - Fatal编程技术网

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开始不序列化字段(与属性相反)