Member 10536462 Ответов: 2

Как эффективно использовать подстроку в C# в приведенной ниже ситуации


у меня есть текстовый файл EventInput.txt с содержанием:
--------------------------------------------------------
{
   "@odata.type" : "#Event.1.0.0.Event",
   "Events" : 
   [
      {
         "EventID" : "9ea74dad-9e33-5549-b2ea-a80217d82315",
         "EventTimestamp" : "2017-09-07T10:36:47Z",
         "EventType" : "Alert",
         "MessageArgs" : [ "Port 1I Box 1 Bay 5", "Slot 0" ],
         "MessageID" : "iLOEvents.0.9.DrvArrPhysDrvErasing",

         "OriginOfCondition" : 
                   "/rest/v1/Systems/1/SmartStorage/ArrayControllers/2/DiskDrives/20",
         "Severity" : "Warning"
      }
   ],
   "Name" : "Events",
   "Type" : "Event.1.0.0"
}

---------------------------------------------------
Мне нужна следующая информация из него в c#:

EventID=9ea74dad-9e33-5549-b2ea-a80217d82315
EventTimestamp=2017-09-07T10:36:47Z
Тип События=Предупреждение
MessageArgs=Port1I, Box1, Bay 5, Слот 0
Код сообщения=iLOEvents.0.9.DrvArrPhysDrvErasing
OriginOfCondition=/rest/v1/Systems/1/SmartStorage/ArrayControllers/2/DiskDrives/20
Серьезность=Предупреждение

Что я уже пробовал:

я опробовал следующий код для извлечения EventTimestamp. Не могли бы вы предложить лучшие способы решить эту проблему:
class Program
    {
        static void Main(string[] args)
        {

         string stringEventReceived =System.IO.File.ReadAllText(@"C:\EventInput.txt");
         Console.WriteLine("EVENT LOG FILE text:" + stringEventReceived);
    
       string stringToFind = "EventTimestamp";
       bool stringMatchResult = stringEventReceived.Contains(stringToFind);

       if (stringMatchResult)
       {
           int index = stringEventReceived.IndexOf(stringToFind);
           if (index >= 0)
               Console.WriteLine("{0} begins at character position {1}", stringToFind, index + 1);
       }
       string RESULT = stringEventReceived.Substring(143, 40);
       Console.WriteLine("RESULT TIMESTAMP: \n" + RESULT);
            Console.ReadKey();
        }
    }

2 Ответов

Рейтинг:
17

Graeme_Grant

Вам не нужно использовать подстроку, есть гораздо более простое решение. Эта статья покажет вам, как работать с данными JSON: Работа с JSON в C# и VB[^]


Member 10536462

Спасибо, как это работает!

Graeme_Grant

Добро пожаловать. :)

Рейтинг:
12

Karthik_Mahalingam

попробовать это

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        public class RootObject
        {
            public string odatatype { get; set; }
            public List<Event> Events { get; set; }
            public string Name { get; set; }
            public string Type { get; set; }
        }

        public class Event
        {
            public string EventID { get; set; }
            public string EventTimestamp { get; set; }
            public string EventType { get; set; }
            public List<string> MessageArgs { get; set; }
            public string MessageID { get; set; }
            public string OriginOfCondition { get; set; }
            public string Severity { get; set; }
        }

        static void Main(string[] args)
        {
            string path = @"D:\Projects\TextFile1.txt";
            string stringEventReceived = System.IO.File.ReadAllText(path);
            string temp = stringEventReceived.Replace("@odata.type", "odatatype");
            JavaScriptSerializer js = new JavaScriptSerializer();
            var obj = js.Deserialize<RootObject>(temp);

            string EventID = obj.Events[0].EventID;
            string EventTimestamp = obj.Events[0].EventTimestamp;
            string MessageID = obj.Events[0].MessageID;
            string MessageArgs = string.Join(",", obj.Events[0].MessageArgs);
            string OriginOfCondition = obj.Events[0].OriginOfCondition;


        }
    }
}


см. статью в решении 1


Member 10536462

Огромное спасибо. Это творит чудеса!

Karthik_Mahalingam

добро пожаловать :)