C\#개발 로그 현지 화 도구

프로그래머 는 문 서 를 쓰 는 것 을 싫어 하고 주석 을 쓰 는 것 을 싫어 하 며 로 그 를 쓰 는 것 도 싫어 합 니 다.출력 하 는 것 도 싫어 합 니 다.  "Id=5,성명=왕 망치,성별=남,생일=2020 년 1 월 1 일"  문자열 채 우기

var log = $"Id={person.Id},   ={person.Name},   ={(person.Sex == SexType.Man ? "  " : "  ")},   ={person.Birthday}";
    JSon 직렬 화 도구 가 얼마나 좋 은 데 출력 은...

 {"id": 5,"name":"   ", "sex":"Man", "birthday":"2020-1-1 00:00:00"}
    업무 부서 의 사람들 은 이해 하지 못 한다.왜냐하면 모든 사람 이 좋 은 영어 기 초 를 가지 고 있 는 것 이 아니 라 나 도 누군가가 사용 하 는 지 자주 추측 하지 못 한다.  DRLS 는"당일 흐 르 는 물"을 표시 합 니 다.
    사실 제 이 슨 의 키 를 중국어 로 조금 만 대체 하면 업무 부 서 는 대부분의 뜻 을 대충 읽 을 수 있다.
    그래서 제 가 도 구 를 하나 개 발 했 어 요.  LocalizationTools,중국어 로그 생 성 을 돕 습 니 다.
    새로운 콘 솔 을 만 들 고 nuget 패 키 지 를 도입 합 니 다LocalizationTools그리고 예제 류 를 정의 합 니 다.

/// <summary>
  ///   
  /// </summary>
  public class Person
  {
    /// <summary>
    /// Id
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    ///   
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    ///     ,               
    /// </summary>
    [DisplayName("    ")]
    public DateTime Birthday { get; set; }

    /// <summary>
    ///   
    /// </summary>
    public SexType Sex { get; set; }

    /// <summary>
    ///     
    /// </summary>
    public bool IsAlive { get; set; }
  }

  /// <summary>
  ///   
  /// </summary>
  public enum SexType
  {
    /// <summary>
    ///   
    /// </summary>
    Man = 0,
    /// <summary>
    ///   
    /// </summary>
    Woman = 2,
    /// <summary>
    ///   
    /// </summary>
    Ladyman = 3,
  }
   생 성 인터페이스 에 XML 문서 파일 을 체크 하 십시오.

      사용 코드

static void Main(string[] args)
    {
      var p1 = new Person
      {
        Id = 1,
        Name = "   ",
        Birthday = DateTime.Parse("2020-01-01"),
        Sex = SexType.Man,
      };
      LocalizationTools.KeyValueSeparator = "=";
      var str = LocalizationTools.ToString(p1);
      Console.WriteLine(str);
    }
    이런 수출 을 믿 으 면 대부분의 사람들 도 알 아 볼 수 있 을 것 이다.

{"Id"=1,"  "="   ","    "="2020/1/1 0:00:00","  "="  ","    "=false}
    LocalizationTools.ToString()방법 은 속성 이름 을 주석 에 있 는 Summary 정보 로 바 꿉 니 다.매개 값 도 마찬가지 로 바 꿉 니 다.
    필드 가 적 으 면 방금 출력 에 문제 가 없 었 습 니 다.필드 가 많 으 면 읽 으 면 눈 이 어 지 러 웠 습 니 다.그래서 이 줄 을 삭제 하 는 것 이 좋 겠 습 니 다.    

LocalizationTools.KeyValueSeparator = "=";
    이렇게 출력 하 는 내용 은... 

{"Id":1,"  ":"   ","    ":"2020/1/1 0:00:00","  ":"  ","    ":false}
    JSon 도구 로 포맷 하기

{
  "Id": 1, 
  "  ": "   ", 
  "    ": "2020/1/1 0:00:00", 
  "  ": "  ", 
  "    ": false
}
    이렇게 하면 하위 대상 의 대상 을 포함 하 더 라 도 매우 분명 하 다.
    이 안의 부족 함 은:  "살 아 있 는 지 여부"이 속성 은 true/false 를 출력 합 니 다.불 값 은 서로 다른 장면 에서 표시 할 수 있 습 니 다.  예/아니오,옳 고 그 름,사용/닫 기.................................................................
    1.ToString()앞에서 IsAlive 가 false 라 는 것 을 알 았 는데'아니오'로 바 꿔 야 합 니 다.

var str = LocalizationTools.ToString(p1, new { IsAlive = " " });
//    {"Id":1,"  ":"   ","    ":"2020/1/1 0:00:00","  ":"  ","    ":" "}
    2.주다 IsAlive 속성 더하기 ToString ReplacePairAttribute,특정한 값 을 대체 합 니 다.

[ToStringReplacePair(true, " ", false, " ")]
public bool IsAlive { get; set; }
     LocalizationTools 교체 속성 이름 의 순 서 는 1.DisplayNameAttribute 입 니 다.   2.주석 에 있 는 summary 는 summary 에 다른 설명 정 보 를 추가 하 는 것 을 좋아 하기 때문에 로그 에 출력 하 는 것 이 보기 좋 지 않 습 니 다.
     ...때문에 DisplayNameAttribute 는 enum 매 거 진 값 에 작용 할 수 없 기 때문에 저 는 전문 적 으로 정 의 했 습 니 다. EnumAlias Attribute,우선 순위 도 주석
     여기 서 특별히 강조 하 겠 습 니 다.  LocalizationTools.ToString()은 JSon 직렬 화 도구 가 아 닙 니 다.어디서나 볼 수 있 는 JSon 포맷 도 구 를 사용 하기 위해 출력 을 JSon 처럼 조정 하기 때문에 이 도 구 는 반 직렬 화 기능 을 고려 하지 않 았 고 순환 참조 문 제 를 해결 하지 않 았 으 며 JSon 의 기준 에 부합 해 야 한 다 는 것 을 고려 하지 않 았 습 니 다.중국어 로 그 를 쉽게 출력 할 수 있 는 도구 일 뿐 입 니 다. 고성능 도 추구 하지 않 았 다.
     LocalizationTools.ToString()은 데이터 시트 를 위 한 프로 그래 밍 에 특히 적 용 됩 니 다.표 필드 는 보통 간단 한 유형 이기 때문에 출력 로 그 는 더욱 직관 적 입 니 다.
     이치 대로 말 하면 이 도구 에 확장 방법 을 제공 해 야 합 니 다.그러나 저 는 강박 증 이 있 습 니 다.많은 라 이브 러 리 가 object 에 여러 가지 확장 방법 을 추가 하여 기분 이 좋 지 않 습 니 다.그래서 저 는 라 이브 러 리 에 확장 방법 을 주동 적 으로 추가 하지 않 았 습 니 다.여러분 은 자신의 프로젝트 에 다음 과 같은 코드 를 추가 하여 확장 방법 을 제공 할 수 있 습 니 다.

namespace Localization
{
  using System.Collections.Generic;
  public static class LocalizationToolsExtend
  {
    public static string ToLocalizationString(this object obj, params string[] ignorePropertyNames)
    {
      return LocalizationTools.ToString(obj, ignorePropertyNames);
    }

    public static string ToLocalizationString<T>(this object obj, T customPropertyValues, params string[] ignorePropertyNames)
       where T : class
    {
      return LocalizationTools.ToString(obj, customPropertyValues, ignorePropertyNames);
    }

    public static string ToLocalizationString(this object obj, Dictionary<string, object> customPropertyValues, params string[] ignorePropertyNames)
    {
      return LocalizationTools.ToString(obj, customPropertyValues, ignorePropertyNames);
    }

    public static string ToLocalizationStringInclude(this object obj, IEnumerable<string> includePropertyNames)
    {
      return LocalizationTools.ToStringInclude(obj, includePropertyNames);
    }

    public static string ToLocalizationStringInclude<T>(this object obj, IEnumerable<string> includePropertyNames, T customPropertyValues)
      where T : class
    {
      return LocalizationTools.ToStringInclude(obj, includePropertyNames, customPropertyValues);
    }

    public static string ToLocalizationStringInclude(this object obj, IEnumerable<string> includePropertyNames, Dictionary<string, object> customPropertyValues)
    {
      return LocalizationTools.ToStringInclude(obj, includePropertyNames, customPropertyValues);
    }
  }
}
     새로 추 가 된 실체의 로그 가 해결 되 었 습 니 다.그 다음 에 또 다른 문제 가 있 습 니 다.실체 변화 로 그 를 어떻게 저장 합 니까?
     가장 간단 한 방법 은 실체 류 수정 전의 제 이 슨 과 수 정 된 제 이 슨 을 모두 보존 하여 업무 자 들 이 스스로 고 통 스 럽 게 찾 는 변 화 를 찾 게 하 는 것 이다.하하,개인 이 라면 불평 할 것 이다.
     프로그래머 에 게 한 필드 한 필드 를 비교 한 다음 로 그 를 만 들 도록 하 세 요.농담 입 니 다!나 는 이런 무미건조 한 일 을 할 수 없다.
     nuget 에 있어 요. JSONDiffPatch 같은 도구 생 성 JSON patch,하지만 출력 결 과 는 인간 을 위 한 것 이 아니 기 때문에 저 는 계속 Compare 방법 을 썼 습 니 다.

static void Main(string[] args)
{
  var p1 = new Person
  {
    Id = 1,
    Name = "   ",
    Birthday = DateTime.Parse("2020-01-01"),
    Sex = SexType.Man,
  };
  var p2 = new Person
  {
    Id = 1,
    Name = "   ",
    Birthday = DateTime.Parse("2021-01-01"),
    Sex = SexType.Man,
  };
  var compareResult = LocalizationTools.Compare(p1, p2);
  Console.WriteLine(compareResult.GetDifferenceMsg());
}
//   : {"  ":{" ":"   ","  ":"   "},"    ":{" ":"2020/1/1 0:00:00","  ":"2021/1/1 0:00:00"}}
     JSON 포맷 해 주세요.

{
  "  ": {
    " ": "   ",
    "  ": "   "
  },
  "    ": {
    " ": "2020/1/1 0:00:00",
    "  ": "2021/1/1 0:00:00"
  }
}
     물론 Compare Result 를 진일보 처리 하고 UpdateDifferent Property 를 사용 하여 비교 결 과 를 수정 한 다음 에 비교 결 과 를 얻 을 수 있 습 니 다.
이상 은 C\#개발 로그 현지 화 도구 에 대한 상세 한 내용 입 니 다.C\#로그 현지 화 도구 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기