簡體   English   中英

文本到C#數組中

[英]Text into C# array

我有一個文本存儲在數據庫中,如下所示。

{
"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]
  }"
);

這是有效的json。 您可以像下面的代碼中那樣提取值:

    var str = "{\"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]}";
    var js = JObject.Parse(str);            
    var values = from child in js.Properties()
                 select new { Key = child.Name, Value = child.Value?[0] };
    foreach (var line in values)
    {
       Console.WriteLine(line.Key);
       Console.WriteLine(line.Value);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM