将模型导出到没有列名或 headers(仅值)的文本文件
Export model to text file with out column names or headers(only values)
我有一个 DTO(Data Transfer Object) object 作为模型,其中包含来自收到的响应的数据。我只需要将 header/column 下的值导出到文本文件。不需要导出列名或 header。在 XmlSerializer
的帮助下,我能够以 XML 格式导出数据。但无法找到任何文本序列化程序。
我的模型如下:
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)
如果它是列表,我将得到低于列表的输出。
任何人都可以帮助我吗?
没有内置的 "text only" 序列化程序将对象 属性 值序列化为行分隔文本。大多数时候,当您想将对象保存为文本时,您只需编写代码即可。
示例:
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 attributes",您可以编写自己的属性:
var properties = typeof(ResponseGradeDto).GetProperties().Where(
prop => Attribute.IsDefined(prop, typeof(XmlElementAttribute))
&& !Attribute.IsDefined(prop, typeof(XmlIgnoreAttribute))
);
希望对您有所帮助!
我有一个 DTO(Data Transfer Object) object 作为模型,其中包含来自收到的响应的数据。我只需要将 header/column 下的值导出到文本文件。不需要导出列名或 header。在 XmlSerializer
的帮助下,我能够以 XML 格式导出数据。但无法找到任何文本序列化程序。
我的模型如下:
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)
如果它是列表,我将得到低于列表的输出。 任何人都可以帮助我吗?
没有内置的 "text only" 序列化程序将对象 属性 值序列化为行分隔文本。大多数时候,当您想将对象保存为文本时,您只需编写代码即可。
示例:
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 attributes",您可以编写自己的属性:
var properties = typeof(ResponseGradeDto).GetProperties().Where(
prop => Attribute.IsDefined(prop, typeof(XmlElementAttribute))
&& !Attribute.IsDefined(prop, typeof(XmlIgnoreAttribute))
);
希望对您有所帮助!