TSV에 대한 클래스의 특정 속성 직렬화

SohamC

다음 유형의 POCO가 있습니다.

public class Person{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public int PinCode { get; set; }
    public string Phone { get; set; }
}

PersonTSV (탭으로 구분 된 값)로 변환하려는 목록이 있습니다. 그러나 TSV를 만드는 동안 특정 속성 만 고려하기를 원합니다. 이 경우 Id, NamePhone.

TSV로 변환하는 데 사용하는 코드는 다음과 같습니다.

 public string Serialize(string separator, IEnumerable<Person> objectlist)
{
    string[] fields = new[] { "Id", "Name", "Phone" };
    StringBuilder tsvdata = new StringBuilder();

    string header = string.Join(separator, fields);
    tsvdata.AppendLine(header);
    foreach (var o in objectlist)
        tsvdata.AppendLine(o.Id + separator + o.Person + separator + o.Phone);

    return tsvdata.ToString();
}

향후 변경 될 수 있으므로 고려할 필드를 정적으로 언급 / 하드 코딩하고 싶지 않습니다. 어떻게하면 되나요?

아담 로타 루

TSV를 만드는 데 외부 라이브러리를 사용하지 않더라도 속성사용 하여 특수 속성 (예 : 제외 된 속성) 을 표시 할 수 있습니다 . 그런 다음 리플렉션사용 하여 기존 속성과 속성을 확인할 수 있습니다 .

다음은 완전한 예입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;

namespace ConsoleApplication1
{
    public class Person
    {
        [DataMember]
        public Guid Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [IgnoreDataMember]
        public string Address { get; set; }
        [IgnoreDataMember]
        public int PinCode { get; set; }
        [DataMember]
        public string Phone { get; set; }
    }

    class Program
    {
        // list of properties of Person class marked with DataMemeber attribute
        private PropertyInfo[] _personProperties = typeof(Person)
            .GetProperties()
            .Where(x => x.GetCustomAttribute(typeof(DataMemberAttribute)) != null).ToArray();

        public string Serialize(string separator, IEnumerable<Person> objectlist)
        {
            StringBuilder tsvdata = new StringBuilder();

            string header = string.Join(separator, _personProperties.Select(x => x.Name).ToArray());
            tsvdata.AppendLine(header);
            foreach (var o in objectlist)
            {
                List<string> lineValues = new List<string>();
                // enumerate through the properties
                foreach (var pi in _personProperties)
                {
                    lineValues.Add(pi.GetValue(o).ToString());
                }
                tsvdata.AppendLine(string.Join(separator, lineValues.ToArray()));
            }

            return tsvdata.ToString();
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            List<Person> persons = new List<Person> {
                new Person { Id = Guid.NewGuid(), Address = "a1", Name = "name1", Phone = "tel1", PinCode = 1111 },
                new Person { Id = Guid.NewGuid(), Address = "a2", Name = "name2", Phone = "tel2", PinCode = 2222 },
            };
            string serializedString = p.Serialize(", ", persons);
            Console.WriteLine($"result: {serializedString}");
        }
    }
}

이 코드는 POCO 클래스의 모든 속성을 열거하고, 특정 속성이 있는지 확인하고, 해당 속성을 제외하고 나머지를 출력합니다.

원하는대로 고유 한 특성을 정의 할 수 있습니다. 여기서 방금 System.Runtime.Serialization의 IgnoreDataMember 를 사용했습니다 (비슷한 목적으로 사용됨).

기존 속성과 속성을 확인하는 것은 리플렉션을 사용하는 것이므로주의해서 사용해야합니다. 성능이 문제가 될 수 있습니다. 코드가 큰 데이터 세트로 여러 번 실행되면 속도가 느려질 수 있습니다. 그래서 personProperties를 루프에서 개인 멤버 (한 번 계산)로 옮깁니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XML의 특정 속성에 대한 직렬화 비활성화

분류에서Dev

C # 직렬화의 클래스 속성에 대한 별칭

분류에서Dev

특정 속성에 대한 심포니 직렬화 방지

분류에서Dev

클래스의 모든 속성을 요소 대신 특성으로 직렬화

분류에서Dev

List <Bar>에 대한 Json 역 직렬화 내의 속성 설정자

분류에서Dev

사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

분류에서Dev

cython의 cdef 클래스 속성에 의한 빠른 정렬

분류에서Dev

특정 중첩 속성을 클래스로 역 직렬화

분류에서Dev

파이썬에서 특정 클래스에 대한 속성의 평균 찾기

분류에서Dev

추가 메타 데이터가있는 클래스 속성에 대한 XML 직렬화

분류에서Dev

특정 클래스의 모든 앵커에 대한 특정 속성 가져 오기

분류에서Dev

GridView에 대한 C ++ 클래스의 Qt / QML 설정 속성

분류에서Dev

Sphinx autodoc에서 특정 클래스 속성에 대한 독 스트링을 재정의 할 수 있나요?

분류에서Dev

환경 변수의 특정 클래스에 대한 디버그를 활성화하는 log4j2

분류에서Dev

클래스 내 캡슐화 된 속성에 대한 탐색을 정의하는 방법은 무엇입니까?

분류에서Dev

잭슨 : 직렬화의 정의는 POJO에 XML 속성

분류에서Dev

클래스의 특정 속성에 대한 열거 형 값을 숨기는 방법이 있습니까?

분류에서Dev

특정 클래스 속성에 대한 html 요소의 번호를 얻는 방법은 무엇입니까?

분류에서Dev

클래스의 속성 초기화, 특정 지연 속성?

분류에서Dev

C #의 XmlSerializer, 특정 특성으로 동일한 이름을 가진 여러 XmlElement로 장식 된 클래스를 역 직렬화 하시겠습니까?

분류에서Dev

JSON 일반 속성 직렬화에 클래스 이름 포함

분류에서Dev

cli C ++ 특정 속성에 대한 개체 목록 정렬

분류에서Dev

내 모델에서 Json.NET에 대한 종속성을 생성하지 않고 파생 클래스를 역 직렬화하는 방법이 있습니까?

분류에서Dev

특정 Gson 직렬 변환기에 대한 직렬화 중 필드 생략

분류에서Dev

ActiveRecord는 현재 속성에 대해 사용자 정의 직렬 변환기에 nil을 전송하는 직렬화

분류에서Dev

CSS, 애니메이션에 대한 여러 클래스 태그 속성 정의

분류에서Dev

개별 요소에 대한 XML 직렬화 재정의

분류에서Dev

클래스 속성의 속성에 의해 정렬 비교하는 비교기 #

분류에서Dev

중첩 클래스에 대한 JSON (역) 직렬화

Related 관련 기사

  1. 1

    XML의 특정 속성에 대한 직렬화 비활성화

  2. 2

    C # 직렬화의 클래스 속성에 대한 별칭

  3. 3

    특정 속성에 대한 심포니 직렬화 방지

  4. 4

    클래스의 모든 속성을 요소 대신 특성으로 직렬화

  5. 5

    List <Bar>에 대한 Json 역 직렬화 내의 속성 설정자

  6. 6

    사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

  7. 7

    cython의 cdef 클래스 속성에 의한 빠른 정렬

  8. 8

    특정 중첩 속성을 클래스로 역 직렬화

  9. 9

    파이썬에서 특정 클래스에 대한 속성의 평균 찾기

  10. 10

    추가 메타 데이터가있는 클래스 속성에 대한 XML 직렬화

  11. 11

    특정 클래스의 모든 앵커에 대한 특정 속성 가져 오기

  12. 12

    GridView에 대한 C ++ 클래스의 Qt / QML 설정 속성

  13. 13

    Sphinx autodoc에서 특정 클래스 속성에 대한 독 스트링을 재정의 할 수 있나요?

  14. 14

    환경 변수의 특정 클래스에 대한 디버그를 활성화하는 log4j2

  15. 15

    클래스 내 캡슐화 된 속성에 대한 탐색을 정의하는 방법은 무엇입니까?

  16. 16

    잭슨 : 직렬화의 정의는 POJO에 XML 속성

  17. 17

    클래스의 특정 속성에 대한 열거 형 값을 숨기는 방법이 있습니까?

  18. 18

    특정 클래스 속성에 대한 html 요소의 번호를 얻는 방법은 무엇입니까?

  19. 19

    클래스의 속성 초기화, 특정 지연 속성?

  20. 20

    C #의 XmlSerializer, 특정 특성으로 동일한 이름을 가진 여러 XmlElement로 장식 된 클래스를 역 직렬화 하시겠습니까?

  21. 21

    JSON 일반 속성 직렬화에 클래스 이름 포함

  22. 22

    cli C ++ 특정 속성에 대한 개체 목록 정렬

  23. 23

    내 모델에서 Json.NET에 대한 종속성을 생성하지 않고 파생 클래스를 역 직렬화하는 방법이 있습니까?

  24. 24

    특정 Gson 직렬 변환기에 대한 직렬화 중 필드 생략

  25. 25

    ActiveRecord는 현재 속성에 대해 사용자 정의 직렬 변환기에 nil을 전송하는 직렬화

  26. 26

    CSS, 애니메이션에 대한 여러 클래스 태그 속성 정의

  27. 27

    개별 요소에 대한 XML 직렬화 재정의

  28. 28

    클래스 속성의 속성에 의해 정렬 비교하는 비교기 #

  29. 29

    중첩 클래스에 대한 JSON (역) 직렬화

뜨겁다태그

보관