Question

In: Computer Science

C# Create a console application named that creates a list of shapes, uses serialization to save...

C#

Create a console application named that creates a list of shapes, uses serialization to save it to the filesystem using XML, and then deserializes it back:

// create a list of Shapes to serialize
var listOfShapes = new List<Shape>
{
new Circle { Colour = "Red", Radius = 2.5 },
new Rectangle { Colour = "Blue", Height = 20.0, Width = 10.0 },
new Circle { Colour = "Green", Radius = 8 },
new Circle { Colour = "Purple", Radius = 12.3 },
new Rectangle { Colour = "Blue", Height = 45.0, Width = 18.0 }
};

Shapes should have a read-only property named Area so that when you deserialize, you can output a list of shapes, including their areas, as shown here:

List<Shape> loadedShapesXml = serializerXml.Deserialize(fileXml)
as List<Shape>;
foreach (Shape item in loadedShapesXml) {
WriteLine($"{item.GetType().Name} is {item.Colour} and has an
area of {item.Area}");
}

This is what your output should look like when you run the application:

Loading shapes from XML:
Circle is Red and has an area of 19.6349540849362
Rectangle is Blue and has an area of 200
Circle is Green and has an area of 201.061929829747
Circle is Purple and has an area of 475.2915525616
Rectangle is Blue and has an area of 810

Solutions

Expert Solution

Short Summary:

  • First, Implement Shape abstract class. Then extend it to Rectangle and Circle.
  • Use serialize attribute as required

Source Code:

Shape.cs File:

using System;

using System.Xml.Serialization;

namespace SerializeDemo

{

    [XmlInclude(typeof(Circle))]

    [XmlInclude(typeof(Rectangle))]

    [Serializable]

    public abstract class Shape

    {

        public string Colour { get; set; }

        public abstract double Area { get; }

    }

}

***************************************************

Circle.cs File:

using System;

namespace SerializeDemo

{

    [Serializable]

    public class Circle:Shape

    {

        public double Radius { get; set; }

        // circle Area = pi * radius^2

        public override double Area { get { return 3.14 * Radius * Radius; } }

    }

}

***************************************************

Rectangle.cs File:

using System;

namespace SerializeDemo

{

    [Serializable]

    public class Rectangle:Shape

    {

        public double Height { get; set; }

        public double Width { get; set; }

        // Rectangle Area = Height * Width

        public override double Area { get { return Height * Width; } }

    }

}

***************************************************

DemoProgram

using System;

using System.Collections.Generic;

using System.Xml.Serialization;

using System.IO;

namespace SerializeDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            string filePath = "Shapes.xml";

           

            // create a list of Shapes to serialize

            var listOfShapes = new List<Shape>

                {

                new Circle { Colour = "Red", Radius = 2.5 },

                new Rectangle { Colour = "Blue", Height = 20.0, Width = 10.0 },

                new Circle { Colour = "Green", Radius = 8 },

                new Circle { Colour = "Purple", Radius = 12.3 },

                new Rectangle { Colour = "Blue", Height = 45.0, Width = 18.0 }

                };

         

            // Serialize the object

            XmlSerializer serializerXml = new XmlSerializer(typeof(List<Shape>));

            System.IO.FileStream fileXmlSerialize = System.IO.File.Create(filePath);

            serializerXml.Serialize(fileXmlSerialize, listOfShapes);

            fileXmlSerialize.Close();

            //Deserialize the object

            using (StreamReader fileXml = new StreamReader(filePath))

            {

                List<Shape> loadedShapesXml = serializerXml.Deserialize(fileXml) as List<Shape>;

                foreach (Shape item in loadedShapesXml)

                {

                    Console.WriteLine($"{item.GetType().Name} is {item.Colour} and has an area of { item.Area}");

                }

            }

            Console.ReadLine();

        }

    }

}

Sample Run:

**************************************************************************************

Feel free to rate the answer and comment your questions, if you have any.

Please upvote the answer and appreciate our time.

Happy Studying!!!

**************************************************************************************


Related Solutions

~~~USING C# ONLY~~~ Create a console application Design a class named Person with properties for holding...
~~~USING C# ONLY~~~ Create a console application Design a class named Person with properties for holding a person’s name, address, and telephone number. Design a class named Customer, which is derived from the Person class. The Customer class should have the variables and properties for the customer number, customer email, a spentAmount of the customer’s purchases, and a Boolean variable indicating whether the customer wishes to be on a mailing list. It also includes a function named calcAmount that calculates...
C# Create a console application that prompts the user to enter a regular expression, and then...
C# Create a console application that prompts the user to enter a regular expression, and then prompts the user to enter some input and compare the two for a match until the user presses Esc: The default regular expression checks for at least one digit. Enter a regular expression (or press ENTER to use the default): ^[a- z]+$ Enter some input: apples apples matches ^[a-z]+$? True Press ESC to end or any key to try again. Enter a regular expression...
with C# create a console application project that outputs the number of bytes in memory that...
with C# create a console application project that outputs the number of bytes in memory that each of the following number types use, and the minimum and maximum values they can have: sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and decimal. Try formatting the values into a nice-looking table! More Information: You can always read the documentation, available at https://docs.microsoft.com/en-us/dotnet/standard/base-types/composite-formatting for Composite Formatting to learn how to align text in a console application. Your output should look...
Language: C# Create a new Console Application. Your Application should ask the user to enter their...
Language: C# Create a new Console Application. Your Application should ask the user to enter their name and their salary. Your application should calculate how much they have to pay in taxes each year and output each amount as well as their net salary (the amount they bring home after taxes are paid!). The only taxes that we will consider for this Application are Federal and FICA. Your Application needs to validate all numeric input that is entered to make...
C# & ASP.NET Create a console application that prompts the user to enter a regular expression,...
C# & ASP.NET Create a console application that prompts the user to enter a regular expression, and then prompts the user to enter some input and compare the two for a match until the user presses Esc: The default regular expression checks for at least one digit. Enter a regular expression (or press ENTER to use the default): ^[a- z]+$ Enter some input: apples apples matches ^[a-z]+$? True Press ESC to end or any key to try again. Enter a...
c# Create a console application that protects an XML file, such as the following example. Note...
c# Create a console application that protects an XML file, such as the following example. Note that the customer's credit card number and password are currently stored in clear text. The credit card must be encrypted so that it can be decrypted and used later, and the password must be salted and hashed: <?xml version="1.0" encoding="utf-8" ?> <customers> <customer> <name>Bob Smith</name> <creditcard>1234-5678-9012-3456</creditcard> <password>Pa$$w0rd</password> </customer> </customers>
C# Create a console application project that outputs the number of bytes in memory that each...
C# Create a console application project that outputs the number of bytes in memory that each of the following number types use, and the minimum and maximum values they can have: sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and decimal. Try formatting the values into a nice-looking table! Your output should look something like this: | Type | Bytes of Memory | Min | Max |
C++ Write a program that creates two rectangular shapes and then animates them. The two shapes...
C++ Write a program that creates two rectangular shapes and then animates them. The two shapes should start on opposite ends of the screen and then move toward each other. When they meet in the middle of the screen, each shape reverses course and moves toward the edge of the screen. The two shapes keep oscillating and bouncing off of each other in the middle of the screen. The program terminates when the shapes meet each other in the middle...
:  Create a new blank C# console application Your basal metabolic rate is the rate...
:  Create a new blank C# console application Your basal metabolic rate is the rate at which the body uses energy while at rest to keep vital functions going, such as breathing and keeping warm. This calculation is vital to weight management, as it allows you to determine calories needed to maintain, lose, or gain weight. To determine your BMR, use the appropriate formula: Female: 655+(4.35 x weight in pounds)+(4.7 x height in inches)-(4.7 x age in years) Males:...
C# Create a console application that asks the user for two numbers in the range 0-255...
C# Create a console application that asks the user for two numbers in the range 0-255 and then divides the first number by the second: Enter a number between 0 and 255: 100 Enter another number between 0 and 255: 8 100 divided by 8 is 12 Enter a number between 0 and 255: apples Enter another number between 0 and 255: bananas FormatException: Input string was not in a correct format.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT