patterncsharpMinor
Proper and elegant way of Building a XML Document
Viewed 0 times
andwaybuildingxmlelegantdocumentproper
Problem
I need to build the following XML document
using the following code, it works but is it the proper way of doing it.
```
internal class Field
{
public string Name { get; set; }
public const string FieldName = "Field";
}
internal class Key
{
public string Field { get; set; }
public const string FieldName = "Field";
}
internal class TableFilter
{
public string Field { get; set; }
public string Filter { get; set; }
public const string FieldName = "Field";
public const string FilterName = "FilterName";
}
void Main()
{
//this part is just for the example, obviously, this would be passed as parameter
var tableId = 5415;
var pageSize = 1;
var pageIndex = 1;
var multiCompany = "No";
var language = 1033;
var fields = new List();
fields.Add(new Field() {Name = "Operation No."});
fields.Add(new Field() {Name = "Line No."});
fields.Add(new Field() {Name = "Date"});
fields.Add(new Field() {Name = "Comment"});
var tableFilters = new List();
tableFilters.Add(new TableFilter() {Field = "Status", Filter = "3"});
tableFilters.Add(new TableFilter() {Field = "Prod. Order No.", Filter = "101006"});
var keys = new List();
keys.Add(new Key() {Field = "Routing Reference No"});
keys.Add(new Key() {Field = "10000"});
//End of setup
XDocument doc = new XDocument(new XElement("SFDocument",
new XElement("TableId", tableId),
new XElement("PageSize", pageSize),
new XElement("PageIndex", pageIndex),
new XElement("MultiCompany", multiCo
5415
1
1
No
1033
Operation No.
Line No.
Date
Comment
Status
3
Prod. Order No.
101006
Routing Reference No
10000
using the following code, it works but is it the proper way of doing it.
```
internal class Field
{
public string Name { get; set; }
public const string FieldName = "Field";
}
internal class Key
{
public string Field { get; set; }
public const string FieldName = "Field";
}
internal class TableFilter
{
public string Field { get; set; }
public string Filter { get; set; }
public const string FieldName = "Field";
public const string FilterName = "FilterName";
}
void Main()
{
//this part is just for the example, obviously, this would be passed as parameter
var tableId = 5415;
var pageSize = 1;
var pageIndex = 1;
var multiCompany = "No";
var language = 1033;
var fields = new List();
fields.Add(new Field() {Name = "Operation No."});
fields.Add(new Field() {Name = "Line No."});
fields.Add(new Field() {Name = "Date"});
fields.Add(new Field() {Name = "Comment"});
var tableFilters = new List();
tableFilters.Add(new TableFilter() {Field = "Status", Filter = "3"});
tableFilters.Add(new TableFilter() {Field = "Prod. Order No.", Filter = "101006"});
var keys = new List();
keys.Add(new Key() {Field = "Routing Reference No"});
keys.Add(new Key() {Field = "10000"});
//End of setup
XDocument doc = new XDocument(new XElement("SFDocument",
new XElement("TableId", tableId),
new XElement("PageSize", pageSize),
new XElement("PageIndex", pageIndex),
new XElement("MultiCompany", multiCo
Solution
I ended up changing my approach and went with a serialize method:
public static class SerializationHelper
{
internal static string SerializeObject(this T toSerialize)
{
var xmlSerializer = new XmlSerializer(toSerialize.GetType());
var textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
}
[Serializable]
public class SFDocument
{
public int TableId { get; set; }
public int PageSize { get; set; }
public int PageIndex { get; set; }
public string MultiCompany { get; set; }
public int Language { get; set; }
[XmlArrayItem("Field")]
public List Fields { get; set; }
public List TableFilters { get; set; }
[XmlArrayItem("Field")]
public List Key { get; set; }
public SFDocument(): this(5415, 1, 1, "No", 1033){}
public SFDocument(int tableId, int pageSize, int pageIndex, string multiCompany, int language)
{
TableId = tableId;
PageSize = pageSize;
PageIndex = pageIndex;
MultiCompany = multiCompany;
Language = language;
Fields = new List();
Key = new List();
TableFilters = new List();
}
}
[Serializable]
public class TableFilter
{
public string Field { get; set; }
public string Filter { get; set; }
public TableFilter() {}
public TableFilter(string field, string filter)
{
Field = field;
Filter = filter;
}
}
void Main()
{
var sfd = new SFDocument();
sfd.Fields.Add("Field1");
sfd.Fields.Add("Field2");
sfd.Fields.Add("Field3");
sfd.Fields.Add("Field4");
sfd.Key.Add("Key1");
sfd.Key.Add("Key2");
sfd.Key.Add("Key3");
sfd.TableFilters.Add(new TableFilter("field1", "filter1"));
sfd.TableFilters.Add(new TableFilter("field2", "filter2"));
sfd.TableFilters.Add(new TableFilter("field3", "filter3"));
sfd.SerializeObject().Dump();
}Code Snippets
public static class SerializationHelper
{
internal static string SerializeObject<T>(this T toSerialize)
{
var xmlSerializer = new XmlSerializer(toSerialize.GetType());
var textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
}
[Serializable]
public class SFDocument
{
public int TableId { get; set; }
public int PageSize { get; set; }
public int PageIndex { get; set; }
public string MultiCompany { get; set; }
public int Language { get; set; }
[XmlArrayItem("Field")]
public List<string> Fields { get; set; }
public List<TableFilter> TableFilters { get; set; }
[XmlArrayItem("Field")]
public List<string> Key { get; set; }
public SFDocument(): this(5415, 1, 1, "No", 1033){}
public SFDocument(int tableId, int pageSize, int pageIndex, string multiCompany, int language)
{
TableId = tableId;
PageSize = pageSize;
PageIndex = pageIndex;
MultiCompany = multiCompany;
Language = language;
Fields = new List<string>();
Key = new List<string>();
TableFilters = new List<TableFilter>();
}
}
[Serializable]
public class TableFilter
{
public string Field { get; set; }
public string Filter { get; set; }
public TableFilter() {}
public TableFilter(string field, string filter)
{
Field = field;
Filter = filter;
}
}
void Main()
{
var sfd = new SFDocument();
sfd.Fields.Add("Field1");
sfd.Fields.Add("Field2");
sfd.Fields.Add("Field3");
sfd.Fields.Add("Field4");
sfd.Key.Add("Key1");
sfd.Key.Add("Key2");
sfd.Key.Add("Key3");
sfd.TableFilters.Add(new TableFilter("field1", "filter1"));
sfd.TableFilters.Add(new TableFilter("field2", "filter2"));
sfd.TableFilters.Add(new TableFilter("field3", "filter3"));
sfd.SerializeObject().Dump();
}Context
StackExchange Code Review Q#36238, answer score: 4
Revisions (0)
No revisions yet.