c#处理3种json数据的实例

csharp,using Newtonsoft.Json;,using System;class Program,{, static void Main(), {, string json1 = "{"Name":"John", "Age":30}";, var person = JsonConvert.DeserializeObject(json1);, Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); string json2 = "[{"Name":"Jane", "Age":25}, {"Name":"Doe", "Age":22}]";, var people = JsonConvert.DeserializeObject(json2);, foreach (var p in people), Console.WriteLine($"Name: {p.Name}, Age: {p.Age}"); string json3 = "{"Employees":[{"Name":"Alice", "Age":32}, {"Name":"Bob", "Age":40}]}";, var employees = JsonConvert.DeserializeObject(json3);, foreach (var e in employees.Employees), Console.WriteLine($"Name: {e.Name}, Age: {e.Age}");, },}public class Person,{, public string Name { get; set; }, public int Age { get; set; },}public class RootObject,{, public Person[] Employees { get; set; },},

在C#中处理JSON数据通常使用Newtonsoft.Json库,它提供了方便的方法来序列化和反序列化JSON,以下是处理三种不同类型JSON数据的实例:

c#处理3种json数据的实例

简单对象

假设我们有以下简单的JSON数据,表示一个用户的信息:

{
  "name": "John Doe",
  "age": 30,
  "email": "john.doe@example.com"
}

我们需要定义一个与JSON结构相对应的类:

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

我们可以使用JsonConvert.DeserializeObject方法将JSON字符串转换为User对象:

string json = @"{
  ""name"": ""John Doe"",
  ""age"": 30,
  ""email"": ""john.doe@example.com""
}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine($"Name: {user.Name}, Age: {user.Age}, Email: {user.Email}");

数组/列表

考虑一个包含多个用户信息的JSON数组:

[
  {
    "name": "John Doe",
    "age": 30,
    "email": "john.doe@example.com"
  },
  {
    "name": "Jane Smith",
    "age": 25,
    "email": "jane.smith@example.com"
  }
]

我们同样定义一个User类,然后使用JsonConvert.DeserializeObject方法将JSON数组转换为User对象的列表:

c#处理3种json数据的实例

string jsonArray = @"[
  {
    ""name"": ""John Doe"",
    ""age"": 30,
    ""email"": ""john.doe@example.com""
  },
  {
    ""name"": ""Jane Smith"",
    ""age"": 25,
    ""email"": ""jane.smith@example.com""
  }
]";
List<User> users = JsonConvert.DeserializeObject<List<User>>(jsonArray);
foreach (var user in users)
{
    Console.WriteLine($"Name: {user.Name}, Age: {user.Age}, Email: {user.Email}");
}

嵌套对象

考虑一个更复杂的JSON结构,其中包含嵌套对象:

{
  "user": {
    "name": "John Doe",
    "age": 30,
    "email": "john.doe@example.com"
  },
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "zipcode": "12345"
  }
}

我们需要定义两个类,一个用于用户信息,另一个用于地址信息:

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string Zipcode { get; set; }
}
public class UserWithAddress
{
    public User User { get; set; }
    public Address Address { get; set; }
}

我们可以将JSON字符串反序列化为UserWithAddress对象:

string nestedJson = @"{
  ""user"": {
    ""name"": ""John Doe"",
    ""age"": 30,
    ""email"": ""john.doe@example.com""
  },
  ""address"": {
    ""street"": ""123 Main St"",
    ""city"": ""Anytown"",
    ""zipcode"": ""12345""
  }
}";
UserWithAddress userWithAddress = JsonConvert.DeserializeObject<UserWithAddress>(nestedJson);
Console.WriteLine($"Name: {userWithAddress.User.Name}, Age: {userWithAddress.User.Age}, Email: {userWithAddress.User.Email}");
Console.WriteLine($"Street: {userWithAddress.Address.Street}, City: {userWithAddress.Address.City}, Zipcode: {userWithAddress.Address.Zipcode}");

相关问答FAQs

Q1: 如果JSON的属性名称与C#类的属性名称不匹配怎么办?

A1: 可以使用[JsonProperty]属性来指定JSON属性名称与C#类属性名称之间的映射关系。

c#处理3种json数据的实例

public class User
{
    [JsonProperty("username")]
    public string Name { get; set; }
}

这样,即使JSON中的键是"username",它也会被正确地映射到Name属性上。

Q2: 如果JSON数据中的某些字段是可选的,如何处理?

A2: 可以将C#类中对应的属性设置为可空类型(如int?string?等),或者在反序列化时使用JsonSerializerSettings并设置NullValueHandling = NullValueHandling.Ignore来忽略JSON中的null值。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1656571.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希
上一篇 2025-03-19 14:13
下一篇 2025-03-19 14:15

相关推荐

  • ASP.NET数据绑定实例详解,如何编写有效的数据绑定代码?

    在ASP.NET中,数据绑定通常通过使用控件如GridView、Repeater等来实现。以下是一个简单的示例代码,展示如何将一个列表绑定到GridView控件:“csharp,// 假设有一个名为Person的类,public class Person,{, public string Name { get; set; }, public int Age { get; set; },}// 在代码后台(例如Page_Load事件)中,protected void Page_Load(object sender, EventArgs e),{, if (!IsPostBack), {, List people = new List, {, new Person { Name = “Alice”, Age = 30 },, new Person { Name = “Bob”, Age = 25 }, }; GridView1.DataSource = people;, GridView1.DataBind();, },},`在前端页面中,可以这样定义GridView控件:`html,,“

    2025-03-09
    016
  • 关于ASP.NET数字签名的实例代码如何实现?

    在ASP.NET中,数字签名通常用于确保数据的完整性和验证发送者的身份。以下是一个简单的示例代码,展示如何在ASP.NET中使用RSA算法进行数字签名:“csharp,using System;,using System.Security.Cryptography;,using System.Text;public class DigitalSignatureExample,{, public static void Main(), {, string data = “Hello, World!”;, using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()), {, // 生成密钥对, rsa.PersistKeyInCsp = false;, byte[] publicKey = rsa.ExportRSAPublicKey();, byte[] privateKey = rsa.ExportRSAPrivateKey(); // 创建签名, byte[] dataBytes = Encoding.UTF8.GetBytes(data);, byte[] signature = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); Console.WriteLine(“Data: ” + data);, Console.WriteLine(“Signature: ” + Convert.ToBase64String(signature)); // 验证签名, using (RSA rsaVerify = RSA.Create()), {, rsaVerify.ImportRSAPublicKey(publicKey, out _);, bool isValid = rsaVerify.VerifyData(dataBytes, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);, Console.WriteLine(“Is signature valid? ” + isValid);, }, }, },},“这段代码展示了如何生成RSA密钥对、使用私钥对数据进行签名以及使用公钥验证签名的有效性。

    2025-03-09
    027
  • Android人脸裁剪实例代码如何实现?

    在Android中,裁剪人脸可以通过使用Camera2 API和FaceDetector类来实现。以下是一个简单的示例代码片段:“java,// 初始化Camera2 API,CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);,String cameraId = cameraManager.getCameraIdList()[0];,CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);,StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);,Size previewSize = map.getOutputSizes(SurfaceTexture.class)[0];// 配置相机预览,SurfaceTexture texture = new SurfaceTexture(10);,texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());,Surface surface = new Surface(texture);// 启动相机预览,CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);,builder.addTarget(surface);,cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {, @Override, public void onConfigured(@NonNull CameraCaptureSession session) {, try {, session.setRepeatingRequest(builder.build(), null, null);, } catch (CameraAccessException e) {, e.printStackTrace();, }, },}, null);// 使用FaceDetector进行人脸检测,FaceDetector faceDetector = new FaceDetector.Builder(context).setTrackingEnabled(false).build();,if (!faceDetector.isOperational()) {, Log.w(“FaceDetector”, “Face detector dependencies are not yet available.”);,} else {, Frame frame = new Frame.Builder().setBitmap(bitmap).build();, SparseArray faces = faceDetector.detect(frame);, for (int i = 0; i˂ faces.size(); ++i) {, Face face = faces.valueAt(i);, // 处理检测到的人脸, },},“

    2025-03-07
    022
  • 如何编写C代码以获取网页中特定字符串信息的实例?

    “csharp,using System;,using System.Net.Http;,using System.Threading.Tasks;class Program,{, static async Task Main(string[] args), {, var client = new HttpClient();, var response = await client.GetStringAsync(“http://example.com”);, var targetString = “target”;, int index = response.IndexOf(targetString);, if (index != -1), {, Console.WriteLine($”Found ‘{targetString}’ at position {index}”);, }, else, {, Console.WriteLine($”‘{targetString}’ not found”);, }, },},“

    2025-03-05
    022

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入