猿问

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

我有一个 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 Name

1234

My Info

PROP-SUMMARY

100

PropertyName1

10

20

PROP-SUMMARY

200

PropertyName2

10

30

end AL300 SAMPLE(end of file)

如果它是列表,我将得到低于列表的输出。任何人都可以帮助我吗?



慕田峪4524236
浏览 100回答 1
1回答

跃然一笑

没有内置的“纯文本”序列化程序将对象属性值序列化为行分隔文本。大多数时候,当您想要将对象保存为文本时,您只需编写代码即可。例子:var x = new ResponseGradeDto{&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Id = Guid.NewGuid(),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Name = "Foo",&nbsp; &nbsp; &nbsp; &nbsp; Code = "Cde",&nbsp; &nbsp; &nbsp; &nbsp; Information = "No info"};using (var writer = new StreamWriter(@"C:\temp\log.txt")){&nbsp; &nbsp; writer.WriteLine(x.Name);&nbsp; &nbsp; writer.WriteLine(x.Code);&nbsp; &nbsp; 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(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prop => Attribute.IsDefined(prop, typeof(XmlElementAttribute))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; && !Attribute.IsDefined(prop, typeof(XmlIgnoreAttribute))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );希望这可以帮助!
随时随地看视频慕课网APP
我要回答