返回首页

您好,

我有很多序列化对象被保存在一个XML文件(自动由XmlSerializer)。排除某些对象,当"序列化"的文件

我真的不知道,如果我解释我的自我没关系,是有可能的,所以请问,如果事情是不明确的
NBSP。;
感谢
SAS加布里埃尔 加布里埃尔SAS

回答

评论会员:游客 时间:2012/02/07
喜加布里埃尔SAS,如果我理解你rigth你想要读取XML,但不是写在序列化过程中的一个字段的值。如果你不想做的序列化(写一些适合您​​的需求-无论读/写方法)也许我有一个想法:XmlIgnore和第二个字段为序列的组合使用。看这个例子:注意:我不说这是一个好主意,或应这样做,我首先想到的只是一个小实验,似乎工作...codeprespanclass="code-keyword"using/spanSystem;spanclass="code-keyword"using/spanSystem.IO;spanclass="code-keyword"using/spanSystem.Xml.Serialization; spanclass="code-keyword"namespace/spanExcludeOnlyFromSerialization{spanclass="code-keyword"class/spanProgram{spanclass="code-keyword"static/spanspanclass="code-keyword"void/spanMain(spanclass="code-keyword"string/span[]args){spanclass="code-keyword"const/spanspanclass="code-keyword"string/spanm_strPATH=spanclass="code-string""/spanspanclass="code-string"Test.xml"/span;spanclass="code-comment"///spanspanclass="code-comment"createasampleobject/spanSampleClasssampleobject=spanclass="code-keyword"new/spanSampleClass(){SomeString=spanclass="code-string""/spanspanclass="code-string"Test"/span,SomeInteger=spanclass="code-digit"987/span,SomeBoolean=spanclass="code-keyword"true/span};Console.WriteLine(sampleobject); spanclass="code-comment"///spanspanclass="code-comment"serializeit/spanSave(sampleobject,m_strPATH); spanclass="code-comment"///spanspanclass="code-comment"-anddeserializeintoanewobject/spanSampleClasssampleobjectNew=Load(m_strPATH);Console.WriteLine(sampleobjectNew); Console.ReadKey();} spanclass="code-keyword"static/spanSampleClassLoad(spanclass="code-keyword"string/spanstrFilePath){SampleClassscLoaded=spanclass="code-keyword"null/span; spanclass="code-keyword"if/span(File.Exists(strFilePath)){XmlSerializerserializer=spanclass="code-keyword"new/spanXmlSerializer(spanclass="code-keyword"typeof/span(SampleClass));spanclass="code-keyword"using/span(FileStreamfilestream=spanclass="code-keyword"new/spanFileStream(strFilePath,FileMode.Open)){spanclass="code-keyword"try/span{scLoaded=(SampleClass)serializer.Deserialize(filestream);}spanclass="code-keyword"catch/span{spanclass="code-keyword"throw/span;}spanclass="code-keyword"finally/span{filestream.Close();}}} spanclass="code-keyword"return/spanscLoaded;} spanclass="code-keyword"static/spanspanclass="code-keyword"void/spanSave(SampleClasssc,spanclass="code-keyword"string/spanstrFilePath){XmlSerializerserializer=spanclass="code-keyword"new/spanXmlSerializer(spanclass="code-keyword"typeof/span(SampleClass)); spanclass="code-keyword"using/span(TextWritertextwriter=spanclass="code-keyword"new/spanStreamWriter(strFilePath)){spanclass="code-keyword"try/span{serializer.Serialize(textwriter,sc);}spanclass="code-keyword"catch/span(Exception){spanclass="code-keyword"throw/span;}spanclass="code-keyword"finally/span{textwriter.Close();}}} } spanclass="code-keyword"public/spanspanclass="code-keyword"class/spanSampleClass{[XmlIgnore]spanclass="code-keyword"public/spanspanclass="code-keyword"string/spanSomeString{spanclass="code-keyword"get/span;spanclass="code-keyword"set/span;}spanclass="code-keyword"public/spanspanclass="code-keyword"int/spanSomeInteger{spanclass="code-keyword"get/span;spanclass="code-keyword"set/span;}spanclass="code-keyword"public/spanspanclass="code-keyword"bool/spanSomeBoolean{spanclass="code-keyword"get/span;spanclass="code-keyword"set/span;} spanclass="code-keyword"string/spanm_strSomeStringDeserializeOnly=spanclass="code-string""/spanspanclass="code-string"Thisisserialized"/span;spanclass="code-keyword"public/spanspanclass="code-keyword"string/spanSomeStringReadOnly{spanclass="code-keyword"get/span{spanclass="code-keyword"return/spanm_strSomeStringDeserializeOnly;}spanclass="code-keyword"set/span{SomeString=value;}} spanclass="code-keyword"public/spanspanclass="code-keyword"override/spanspanclass="code-keyword"string/spanToString(){spanclass="code-keyword"return/spanspanclass="code-SDKkeyword"String/span.Format(spanclass="code-string""/spanspanclass="code-string"{0}({3}),{1},{2}"/span,SomeString,SomeInteger,SomeBoolean,SomeStringReadOnly);}}}/pre/code所以,如果你SampleClass的对象序列化,SomeString被忽略,但SomeStringDeserializeOnly写入。如果反序列化"SampleClass"对象,的SomeStringDeserializeOnly值被读取和设置的SomeString属性(一套SomeStringDeserializeOnly财产存取完成)。我希望这是对你有用的,但什么难题,我是你为什么要这么做?我可以回头看"几年"的专业编码和无数的序列场景,但我从来没有碰到过这样的非微调系列化requirenment-你有写另一个值,无论如何,如果你想读的东西回来......你舒尔这是你需要什么?(对不起,如果我完全地missunderstood你,但我这样做-使用正常的财产和序列化/反序列化-分配"非写/读"属性(使用后反序列化)XMLIgnore)。|lukeer
这取决于你想如何灵活解决方案。 ]如果你知道在编译时,可以用什么,什么不应该得到序列
评论会员:游客 时间:2012/02/07
SAKryukov:我建议使用数据合同。这种方式是最非侵入性。要序列化的成员甚至没有为公众,并没有实现任何接口。你只需要以纪念这表明作为合同的一部分,他们的属性类型和成员。请参阅{A}我主张这种做法,也看到我过去的答案:{A2}{A3的}{A4}mdash;SA