Экспорт модели в текстовый файл без названий столбцов или заголовков (только значения) - PullRequest
0 голосов
/ 02 апреля 2019

В качестве модели у меня есть объект DTO (Data Transfer Object), который содержит данные из полученного ответа. Мне нужно экспортировать только значения в заголовке / столбце в текстовый файл. Имена столбцов или заголовок не нужно экспортировать. Я могу экспортировать данные в формате 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)

enter image description here

Если это список, я получаю вывод ниже для списка. Может ли кто-нибудь помочь мне в этом?

1 Ответ

1 голос
/ 02 апреля 2019

Нет встроенного сериализатора «только для текста», который сериализует значения свойств объекта как текст, разделенный строкой. Большую часть времени, когда вы хотите сохранить свой объект как текст, вы просто пишете код для этого.

Пример:

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))
            );

Надеюсь, это поможет!

...