我正在序列化对象列表 List<TestObject>
,XmlSerializer生成<ArrayOfTestObject>属性,我想重命名或删除它.
可以通过创建将List封装为字段的新类来完成吗?
[XmlRoot("Container")]
public class TestObject
{
public TestObject() { }
public string Str { get; set; }
}
List<TestObject> tmpList = new List<TestObject>();
TestObject TestObj = new TestObject();
TestObj.Str = "Test";
TestObject TestObj2 = new TestObject();
TestObj2.Str = "xcvxc";
tmpList.Add(TestObj);
tmpList.Add(TestObj2);
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Indent = true;
XmlSerializer serializer = new XmlSerializer(typeof(List<TestObject>));
using (XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
serializer.Serialize(writer, tmpList, namespaces);
} …Run Code Online (Sandbox Code Playgroud) 我一直在谷歌搜索过去几个小时并尝试不同的东西,但似乎不能在这个底部....
当我运行此代码时,内存使用量不断增长.
while (true)
{
try
{
foreach (string sym in stringlist)
{
StreamReader r = new StreamReader(@"C:\Program Files\" + sym + ".xml");
XmlSerializer xml = new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode"));
XMLObj obj = (XMLObj)xml.Deserialize(r);
obj.Dispose();
r.Dispose();
r.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Thread.Sleep(1000);
Console.Clear();
}
Run Code Online (Sandbox Code Playgroud)
XMLObj是一个自定义对象
[Serializable()]
public class XMLObj: IDisposable
{
[XmlElement("block")]
public List<XMLnode> nodes{ get; set; }
public XMLObj() { }
public void Dispose()
{
nodes.ForEach(n => n.Dispose());
nodes= null;
GC.SuppressFinalize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加GC.Collect(); 但这似乎没有做任何事情.
我正在将对象序列化为XML.我有这样的事情:
Class A
{
public string propertyA1 { get; set; }
public List<B> bList { get; set; }
}
Class B
{
public string num {get; set;}
public string propertyB1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我将它序列化为XML时,我希望它看起来像这样:
<A>
<propertyA1>someVal</propertyA1>
<B num=1>
<propertyB1>someVal</propertyB1>
</B>
<B num=2>
<propertyB1>someVal</propertyB1>
</B>
</A>
Run Code Online (Sandbox Code Playgroud)
但是,它看起来像这样:
<A>
<propertyA1>someVal</propertyA1>
<bList>
<B num=1>
<propertyB1>someVal</propertyB1>
</B>
<B num=2>
<propertyB1>someVal</propertyB1>
</B>
</bList>
</A>
Run Code Online (Sandbox Code Playgroud)
知道怎么摆脱输出中的bList吗?如果需要,我可以提供更多示例代码
谢谢,斯科特