c# - 将文本转换为 C# 数组
问题描述
我有一个文本存储在数据库中,如下所示。
{
"Date and Time":[false,"All","widgetleftZone","510","338",0,0,0],
"How to Videos":[false,"All","widgetrightZone","510","338",0,0,0],
"My Timesheets And Schedule":[true,"All","widgetrightZone","510","338",0,0,0]
}
我需要将文本拆分如下。
Date and Time: false,
How to Videos:false,
My Timesheets And Schedule:true
我怎样才能在 C# 中做到这一点?
解决方案
这看起来像 JSON。我建议使用类似https://app.quicktype.io/#l=cs&r=json2csharp的东西来生成一个类来帮助解析它。
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
// using QuickType;
//
// var data = Data.FromJson(jsonString);
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Data
{
[JsonProperty("Date and Time")]
public DateAndTime[] DateAndTime { get; set; }
[JsonProperty("How to Videos")]
public DateAndTime[] HowToVideos { get; set; }
[JsonProperty("My Timesheets And Schedule")]
public DateAndTime[] MyTimesheetsAndSchedule { get; set; }
}
public partial struct DateAndTime
{
public bool? Bool;
public long? Integer;
public string String;
public static implicit operator DateAndTime(bool Bool) => new DateAndTime { Bool = Bool };
public static implicit operator DateAndTime(long Integer) => new DateAndTime { Integer = Integer };
public static implicit operator DateAndTime(string String) => new DateAndTime { String = String };
}
public partial class Data
{
public static Data FromJson(string json) => JsonConvert.DeserializeObject<Data>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Data self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters = {
DateAndTimeConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class DateAndTimeConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(DateAndTime) || t == typeof(DateAndTime?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.Integer:
var integerValue = serializer.Deserialize<long>(reader);
return new DateAndTime { Integer = integerValue };
case JsonToken.Boolean:
var boolValue = serializer.Deserialize<bool>(reader);
return new DateAndTime { Bool = boolValue };
case JsonToken.String:
case JsonToken.Date:
var stringValue = serializer.Deserialize<string>(reader);
return new DateAndTime { String = stringValue };
}
throw new Exception("Cannot unmarshal type DateAndTime");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
var value = (DateAndTime)untypedValue;
if (value.Integer != null)
{
serializer.Serialize(writer, value.Integer.Value);
return;
}
if (value.Bool != null)
{
serializer.Serialize(writer, value.Bool.Value);
return;
}
if (value.String != null)
{
serializer.Serialize(writer, value.String);
return;
}
throw new Exception("Cannot marshal type DateAndTime");
}
public static readonly DateAndTimeConverter Singleton = new DateAndTimeConverter();
}
}
要使用上述将数据库字符串发送到FromJson
方法。
var newData = Data.FromJson("{
"Date and Time":[false,"All","widgetleftZone","510","338",0,0,0],
"How to Videos":[false,"All","widgetrightZone","510","338",0,0,0],
"My Timesheets And Schedule":[true,"All","widgetrightZone","510","338",0,0,0]
}"
);
推荐阅读
- node.js - 如何在没有模板引擎的情况下在 Node.js 中正确导入页眉和页脚?
- python - 可以使用pymongo的方法获取证券占用资金和证券数量吗?
- asp.net-core - 从 asp.net core 3.1 中的 app.settings.json 文件中获取 ConnectionString 值
- regex - 正则表达式捕获 N 组和其余组?
- php - 在php中保存url结构和查询参数的同时重定向到新的url
- .net-core - Dotnet iot System.Device.Gpio 无法使用输出模式打开引脚
- python - Python Tkinter 错误 entryformartname 未定义
- swift - How Should My Code Run When using SwiftUI And Websockets
- python - Pytorch:RuntimeError:预期的 dtype Float 但得到了 dtype Long
- .net - 将 .NET Framework VB 项目转换为 .NET Core