为了账号安全,请及时绑定邮箱和手机立即绑定

将模型导出到没有列名或标题(仅值)的文本文件

将模型导出到没有列名或标题(仅值)的文本文件

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 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信