NewtonSoft JsonConverter - ๋ค๋ฅธ ์์ฑ์ ์ก์ธ์ค
JsonConverter์์ ๋ถ๋ชจ ๊ฐ์ฒด์ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋ ฌํ๋๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ฐ ์์กดํ๋ ๋ณํ๊ธฐ์ ์ถ๋ ฅ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ์
๋๋ค. ๋ด ํน์ ์ฌ์ฉ ์ฌ๋ก์์๋ ์์ฑ์ ๋ํ JSON ์ถ๋ ฅ์ ํตํ ๋ฌธ์์ด๋ก ํ์ํํด์ผ ํฉ๋๋ค.
ํฌํจํ๋ ๊ฐ์ฒด ๋ด์ ์ ์ฅ๋ ๋ฌธํ๊ถ์
๋๋ค.
์๋ฅผ ๋ค์ด
public class Contract {
[JsonIgnore]
public CultureInfo Culture {get; set;}
[JsonConverter(typeof(CurrencyConverter))]
public decimal Cost {get;set;}
// Lots of additional properties with serialization controlled by attributes.
}
๊ณ์ฝ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ค์ JSON [{ Cost : "ยฃ5000.00"}, { Cost : "$8000.00"}, { Cost : "โฌ599.00"}]
์ ์ป์ต๋๋ค.
JsonSerializeWriter์ _serializerStack์ WriteJson์ ์ ๋ฌ๋ ์ง๋ ฌ ๋ณํ๊ธฐ ๊ฐ์ฒด์ ๊ณต์ฉ ์์ฑ์ผ๋ก ReadOnlyCollection์ผ๋ก ๋ ธ์ถํฉ๋๋ค.
๋ณํ๊ธฐ์ ์ถ๋ ฅ์ด ํฌํจ ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ ํฌํจ ์ ํ์ด ๋ณํ๋๋ ๊ฒ์ด ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@JonHanna ์์ฑ์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๋์์ ์์กดํ์ง ์๊ณ ํฌํจํ๋ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ ๋ณํ์ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ Contract
์ Vendor
๊ฐ ๋ง๊ณ ๊ฐ๊ฐ Asset
๊ฐ ๋ง๊ณ Asset
์ ๋น์ฉ ํ๋์ ๋ฐ๋ผ ํ์ํ๋ ์ถ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ Contract Culture์ ๊ฒฝ์ฐ Contract
์ ๋ํ ๋ณํ๊ธฐ๋ฅผ ์์ฑํ ๋ค์ ๋ชจ๋ ํ์ ์์ฑ์ ์ง๋ ฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ ๋ณํ๊ธฐ๊ฐ ํด๋น ๋ฌธํ๊ถ์ ์ฐพ๊ณ ์ถ๋ ฅ ํ์์ ์ง์ ํ๊ธฐ ์ํด ์ง๋ ฌํ ํธ๋ฆฌ๋ฅผ ํ์ํ ์ ์๋ ๋ณํ๊ธฐ์ ๋ํ ์ถ๊ฐ ์ฝ๋๊ฐ ๋ง์ด ์์ฑ๋ฉ๋๋ค.
DTO ๊ฐ์ฒด๋ ๋์์ ์ ์ํ๋ ์์ฑ์ผ๋ก ๋น๊ต์ ๊นจ๋ํ๊ณ ๋ณํ๊ธฐ๋ ๋ชจ๋ ์ถ๊ฐ ์์ฑ์ ๋งคํํ ํ์ ์์ด ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค.
๋ฆฌํ๋ ์
์ ์ฌ์ฉํ์ฌ ์ ๋ฌ๋ JsonSerializer
์์ GetInternalSerializer()
๋ฅผ ํธ์ถํ ๋ค์ ๊ฐ์ธ _serializerStack
ํ๋๋ฅผ ๊ฒ์ํ์ฌ ์๋ํ๋๋ก ํ์ต๋๋ค. JsonSerializerInternalWriter
๊ฐ "_serializerStack" ํ๋๋ฅผ JsonSerializer
๋ ๋
ธ์ถํ ์ ์๋ ์์ฑ์ผ๋ก ๋
ธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ด ์ ์์ ๋ด๋ถ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ฝ๊ธฐ ์ ์ฉ ์ปฌ๋ ์
์ผ๋ก ๋
ธ์ถํ๋ ๊ฒ์
๋๋ค.
์ง๋ ฌํ์ ๋ฐ์ํ๋ ๊ฒ์ด ์ง๋ ฌํ ์คํ์ ๋๋ฌํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ถฉ๋์ํค๊ณ ์ถ์ต๋๋ค.
์๋๋ฉด ์ง๊ธ๊น์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@JonHanna ์์ฑ์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๋์์ ์์กดํ์ง ์๊ณ ํฌํจํ๋ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ ๋ณํ์ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ
Contract
์Vendor
๊ฐ ๋ง๊ณ ๊ฐ๊ฐAsset
๊ฐ ๋ง๊ณAsset
์ ๋น์ฉ ํ๋์ ๋ฐ๋ผ ํ์ํ๋ ์ถ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ Contract Culture์ ๊ฒฝ์ฐContract
์ ๋ํ ๋ณํ๊ธฐ๋ฅผ ์์ฑํ ๋ค์ ๋ชจ๋ ํ์ ์์ฑ์ ์ง๋ ฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ ๋ณํ๊ธฐ๊ฐ ํด๋น ๋ฌธํ๊ถ์ ์ฐพ๊ณ ์ถ๋ ฅ ํ์์ ์ง์ ํ๊ธฐ ์ํด ์ง๋ ฌํ ํธ๋ฆฌ๋ฅผ ํ์ํ ์ ์๋ ๋ณํ๊ธฐ์ ๋ํ ์ถ๊ฐ ์ฝ๋๊ฐ ๋ง์ด ์์ฑ๋ฉ๋๋ค.DTO ๊ฐ์ฒด๋ ๋์์ ์ ์ํ๋ ์์ฑ์ผ๋ก ๋น๊ต์ ๊นจ๋ํ๊ณ ๋ณํ๊ธฐ๋ ๋ชจ๋ ์ถ๊ฐ ์์ฑ์ ๋งคํํ ํ์ ์์ด ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค.
๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ฌ ์ ๋ฌ๋
JsonSerializer
์์GetInternalSerializer()
๋ฅผ ํธ์ถํ ๋ค์ ๊ฐ์ธ_serializerStack
ํ๋๋ฅผ ๊ฒ์ํ์ฌ ์๋ํ๋๋ก ํ์ต๋๋ค.JsonSerializerInternalWriter
๊ฐ "_serializerStack" ํ๋๋ฅผJsonSerializer
๋ ๋ ธ์ถํ ์ ์๋ ์์ฑ์ผ๋ก ๋ ธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ด ์ ์์ ๋ด๋ถ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ฝ๊ธฐ ์ ์ฉ ์ปฌ๋ ์ ์ผ๋ก ๋ ธ์ถํ๋ ๊ฒ์ ๋๋ค.