예제 #1
0
    private void AssertWrittenJson <TValue>(TValue value, GrpcJsonSettings?settings = null, bool?compareRawStrings = null) where TValue : IMessage
    {
        var typeRegistery = TypeRegistry.FromFiles(
            HelloRequest.Descriptor.File,
            Timestamp.Descriptor.File);

        settings ??= new GrpcJsonSettings {
            WriteInt64sAsStrings = true
        };

        var formatterSettings = new JsonFormatter.Settings(
            formatDefaultValues: !settings.IgnoreDefaultValues,
            typeRegistery);

        formatterSettings = formatterSettings.WithFormatEnumsAsIntegers(settings.WriteEnumsAsIntegers);
        var formatter = new JsonFormatter(formatterSettings);

        var jsonOld = formatter.Format(value);

        _output.WriteLine("Old:");
        _output.WriteLine(jsonOld);

        var jsonSerializerOptions = CreateSerializerOptions(settings, typeRegistery);
        var jsonNew = JsonSerializer.Serialize(value, jsonSerializerOptions);

        _output.WriteLine("New:");
        _output.WriteLine(jsonNew);

        using var doc1 = JsonDocument.Parse(jsonNew);
        using var doc2 = JsonDocument.Parse(jsonOld);

        var comparer = new JsonElementComparer(maxHashDepth: -1, compareRawStrings: compareRawStrings ?? false);

        Assert.True(comparer.Equals(doc1.RootElement, doc2.RootElement));
    }
예제 #2
0
        /// <summary>
        /// Converts the <see cref="message"/> to a string with newlines separating each declaration for easy analysis.
        /// </summary>
        /// <param name="message">Decoded proto message data</param>
        /// <returns>Single line string ready for writing to a file</returns>
        public static string DumpAll(this IMessage message)
        {
            var s      = new JsonFormatter.Settings(true);
            var f      = new JsonFormatter(s);
            var result = f.Format(message);

            return(Prettify(result));
        }
예제 #3
0
        public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {
            HttpResponse response = context.HttpContext.Response;

            IMessage protoObj = (IMessage)context.Object;

            JsonFormatter.Settings formatterSettings = new JsonFormatter.Settings(true);
            JsonFormatter          jsonFormatter     = new JsonFormatter(formatterSettings);

            await response.WriteAsync(jsonFormatter.Format(protoObj));
        }
예제 #4
0
        /// <summary>
        /// Converts each message in <see cref="messages"/> to a string.
        /// </summary>
        /// <typeparam name="T">Type of message</typeparam>
        /// <param name="messages">Decoded proto message data table</param>
        /// <returns>Single line string ready for writing to a file</returns>
        public static IEnumerable <string> DumpAllLines(this IEnumerable <IMessage> messages)
        {
            var s = new JsonFormatter.Settings(true);
            var f = new JsonFormatter(s);

            yield return("{ \"entries\": [");

            foreach (var m in messages)
            {
                yield return(f.Format(m) + ",");
            }
            yield return("]}");
        }
예제 #5
0
 private void LogMessage(IMessage message)
 {
     if (LogStream != null)
     {
         using (var writer = new StreamWriter(LogStream, Encoding.UTF8, 0x1000, true))
         {
             writer.Write(" DBG >>> ");
             var settings  = new JsonFormatter.Settings(true);
             var formatter = new JsonFormatter(settings);
             formatter.Format(message, writer);
             writer.Write("\r\n");
         }
     }
 }
예제 #6
0
        /// <summary>
        /// Converts each message in <see cref="messages"/> to a string.
        /// </summary>
        /// <typeparam name="T">Type of message</typeparam>
        /// <param name="messages">Decoded proto message data table</param>
        /// <returns>Single line string ready for writing to a file</returns>
        public static IEnumerable <string> DumpAllLines(this IEnumerable <IMessage> messages)
        {
            var s = new JsonFormatter.Settings(true);
            var f = new JsonFormatter(s);

            var size = messages.Count();

            yield return("{\"entries\": [");

            for (int i = 0; i < size; i++)
            {
                yield return(f.Format(messages.ElementAt(i)) + (i == size - 1 ? "" : ","));
            }
            yield return("]}");
        }
예제 #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");

            var tr = new TestReflection();

            tr.DoCheck();
            return;


            TestEnum(); return;

            var m = new SearchRequest();

            m.Query         = "Select * from toto";
            m.PageNumber    = 0;
            m.ResultPerPage = 5;
            m.Data          = ByteString.CopyFrom("Hello world xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", Encoding.ASCII);
            m.Contents.Add(new subfield()
            {
                Id = 1, Content = ByteString.CopyFrom("zzzzzzzzzzzzzzzzzzzz", Encoding.ASCII)
            });
            m.Contents.Add(new subfield()
            {
                Id = 17, Content = ByteString.CopyFrom("zzzdgdfdferg", Encoding.ASCII)
            });

            Console.WriteLine("m={0}", m);

            var m2 = SearchRequest.Parser.ParseFrom(m.ToByteArray());

            Console.WriteLine("m2={0}", m2);

            foreach (var item in m2.Contents)
            {
                item.Content = ByteString.CopyFrom("aaaaaa", Encoding.ASCII);
            }
            Console.WriteLine("m2_bis={0}", m2);
            Console.WriteLine("m_bis={0}", m);

            // Reflection m2 + modif
            //PrintMessage(m2);

            PrintSmart(m);
            Console.WriteLine("m_ter={0}", m);

            var js = new JsonFormatter.Settings(true);
            var jf = new JsonFormatter(js);

            Console.WriteLine("m4={0}", jf.Format(m));

            var t = new Google.Protobuf.WellKnownTypes.Any();

            Console.WriteLine(Properties.Settings.Default.Tester);
            Properties.Settings.Default.Tester = "lionel";
            Properties.Settings.Default.Save();

            Console.WriteLine(Properties.Resources.MyString);

            Console.WriteLine(Properties.Resources.TextFile1);
        }