C\#개발 로그 현지 화 도구
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\#로그 현지 화 도구 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.