亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將模型導出到沒有列名或標題(僅值)的文本文件

將模型導出到沒有列名或標題(僅值)的文本文件

C#
慕田峪4524236 2022-11-21 22:02:13
我有一個 DTO(數據傳輸對象)對象作為模型,其中包含來自收到的響應的數據。我只需要將標題/列下的值導出到文本文件。不需要導出列名或標題。我能夠在 的幫助下以 XML 格式導出數據XmlSerializer。但無法找到任何文本序列化程序。我的模型如下:public class ResponseGradeDto    {        [XmlIgnore]        [XmlElement(ElementName = "GRADEID")]        public Guid Id { get; set; }        [XmlElement(ElementName = "GRADENAME")]        public string Name { get; set; }        [XmlElement(ElementName = "GRADECODE")]        public string Code { get; set; }        public List<GradeQualitySpecDto> QualitySpecItem { get; set; }}我試過下面的代碼:System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(responseGradeDto.GetType());            using (StringWriter textWriter = new StringWriter())            {                xmlSerializer.Serialize(textWriter, responseGradeDto);                string a = textWriter.ToString();                return textWriter.ToString();            }假設我的模型如下:{        "name": "My Name",        "code": "1234",        "information": "My Info",        "gradeQualitySpecItem": [        {            "propertyid": "100",            "propertyname": "PropertyName1",            "target": 10,            "sigma": 20        },        {            "propertyid": "200",            "propertyname": "PropertyName2",            "target": 10,            "sigma": 30        }]}我需要在文本文件中輸出如下:AL300 SAMPLE(Some hard coded text)My Name1234My InfoPROP-SUMMARY100PropertyName11020PROP-SUMMARY200PropertyName21030end AL300 SAMPLE(end of file)如果它是列表,我將得到低于列表的輸出。任何人都可以幫助我嗎?
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

沒有內置的“純文本”序列化程序將對象屬性值序列化為行分隔文本。大多數時候,當您想要將對象保存為文本時,您只需編寫代碼即可。


例子:


var x = new ResponseGradeDto{ 

        Id = Guid.NewGuid(), 

        Name = "Foo",

        Code = "Cde",

        Information = "No info"

};


using (var writer = new StreamWriter(@"C:\temp\log.txt"))

{

    writer.WriteLine(x.Name);

    writer.WriteLine(x.Code);

    writer.WriteLine(x.Information);

}

然而,更通用的方法是使用反射來獲取對象的所有引用屬性:


var properties = typeof(ResponseGradeDto).GetProperties();

然后將屬性轉儲到文件中就很簡單了(注意我使用了x上面代碼中定義的對象):


File.WriteAllLines(@"C:\temp\attr.txt", properties.Select(p => p.GetValue(x).ToString()));

如果您愿意,可以使用帶有上述反射解決方案的屬性來過濾掉想要的/不需要的屬性。在這里,我重用了您在示例中使用的“Xml 屬性”,您可以編寫自己的屬性:


var properties = typeof(ResponseGradeDto).GetProperties().Where(

                    prop => Attribute.IsDefined(prop, typeof(XmlElementAttribute))

                        && !Attribute.IsDefined(prop, typeof(XmlIgnoreAttribute))

            );

希望這可以幫助!


查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號