示例#1
0
 // Writing RobotInfo value. It could be generated instead.
 public static void WriteValue(this IJSValueWriter writer, RobotInfo value)
 {
     if (value != null)
     {
         writer.WriteObjectBegin();
         writer.WriteObjectProperty(nameof(value.Model), value.Model);
         writer.WriteObjectProperty(nameof(value.Name), value.Name);
         writer.WriteObjectProperty(nameof(value.Age), value.Age);
         writer.WriteObjectProperty(nameof(value.Shape), value.Shape);
         writer.WriteObjectProperty(nameof(value.Shape2), value.Shape2);
         writer.WriteObjectProperty(nameof(value.Shape3), value.Shape3);
         writer.WriteObjectProperty(nameof(value.Steps), value.Steps);
         writer.WriteObjectProperty(nameof(value.Dimensions), value.Dimensions);
         writer.WriteObjectProperty(nameof(value.Badges), value.Badges);
         writer.WriteObjectProperty(nameof(value.Tools), value.Tools);
         writer.WriteObjectProperty(nameof(value.Path), value.Path);
         writer.WriteObjectProperty(nameof(value.Extra), value.Extra);
         writer.WriteObjectEnd();
     }
     else
     {
         writer.WriteNull();
     }
 }
        public void TestWriteCustomType()
        {
            var robot = new RobotInfo
            {
                Model  = RobotModel.R2D2,
                Name   = "Bob",
                Age    = 42,
                Shape  = RobotShape.Trashcan,
                Shape2 = RobotShape.Beercan,
                Shape3 = null,
                Steps  = new List <int> {
                    1, 2, 3
                },
                Dimensions = new Dictionary <string, int> {
                    ["Width"] = 24, ["Height"] = 78
                },
                Badges = Tuple.Create(2, "Maverick", true),
                Tools  = new RobotTool[] {
                    new RobotTool {
                        Name = "Screwdriver", Weight = 2, IsEnabled = true
                    },
                    new RobotTool {
                        Name = "Electro-shocker", Weight = 3, IsEnabled = false
                    }
                },
                Path = new RobotPoint[] {
                    new RobotPoint {
                        X = 5, Y = 6
                    },
                    new RobotPoint {
                        X = 45, Y = 90
                    },
                    new RobotPoint {
                        X = 15, Y = 16
                    }
                },
                Extra = new R2D2Extra {
                    MovieSeries = "Episode 2"
                }
            };

            var writer = new JTokenJSValueWriter();

            writer.WriteValue(robot);
            JToken jValue = writer.TakeValue();

            Assert.AreEqual((int)RobotModel.R2D2, jValue["Model"]);
            Assert.AreEqual("Bob", jValue["Name"]);
            Assert.AreEqual(42, jValue["Age"]);
            Assert.AreEqual((int)RobotShape.Trashcan, jValue["Shape"]);
            Assert.AreEqual((int)RobotShape.Beercan, jValue["Shape2"]);
            Assert.AreEqual(JTokenType.Null, jValue["Shape3"].Type);
            Assert.AreEqual(3, (jValue["Steps"] as JArray).Count);
            Assert.AreEqual(1, jValue["Steps"][0]);
            Assert.AreEqual(2, jValue["Steps"][1]);
            Assert.AreEqual(3, jValue["Steps"][2]);
            Assert.AreEqual(2, (jValue["Dimensions"] as JObject).Count);
            Assert.AreEqual(24, jValue["Dimensions"]["Width"]);
            Assert.AreEqual(78, jValue["Dimensions"]["Height"]);
            Assert.AreEqual(2, jValue["Badges"][0]);
            Assert.AreEqual("Maverick", jValue["Badges"][1]);
            Assert.AreEqual(true, jValue["Badges"][2]);
            Assert.AreEqual(2, (jValue["Tools"] as JArray).Count);
            Assert.AreEqual("Screwdriver", jValue["Tools"][0]["Name"]);
            Assert.AreEqual(2, jValue["Tools"][0]["Weight"]);
            Assert.AreEqual(true, jValue["Tools"][0]["IsEnabled"]);
            Assert.AreEqual("Electro-shocker", jValue["Tools"][1]["Name"]);
            Assert.AreEqual(3, jValue["Tools"][1]["Weight"]);
            Assert.AreEqual(false, jValue["Tools"][1]["IsEnabled"]);
            Assert.AreEqual(3, (jValue["Path"] as JArray).Count);
            Assert.AreEqual(5, jValue["Path"][0]["X"]);
            Assert.AreEqual(6, jValue["Path"][0]["Y"]);
            Assert.AreEqual(45, jValue["Path"][1]["X"]);
            Assert.AreEqual(90, jValue["Path"][1]["Y"]);
            Assert.AreEqual(15, jValue["Path"][2]["X"]);
            Assert.AreEqual(16, jValue["Path"][2]["Y"]);
            Assert.AreEqual("Episode 2", jValue["Extra"]["MovieSeries"]);
        }