मैं एक json फ़ाइल से एक गतिशील वस्तु को पढ़ना चाहूंगा और फिर एक स्ट्रिंगटाइप में इसका उपयोग करूंगा।
निम्नलिखित कोड काम करता है।
dynamic data = new { bcName = "Lixam B.V", periodName = "July 2013" };
var engine = new Template("<m.bcName> <m.periodName>");
engine.Add("m", data);
engine.Render().Should().Be("Lixam B.V July 2013");
निम्न कोड विफल रहता है
var json = "{bcName : "Lixam B.V", periodName : "July 2013"}";
dynamic data = JsonConvert.DeserializeObject(json);
string name = (data.bcName);
name.Should().Be("Lixam B.V"); // this passes
var engine = new Template("<m.bcName> <m.periodName>");
engine.Add("m", data);
engine.Render().Should().Be("Lixam B.V July 2013"); //fails
JringConverter को StringTemplate के साथ संगत करने के लिए कॉन्फ़िगर करने का एक और तरीका है
उत्तर:
उत्तर № 1 के लिए 1आपको एक बनाना होगा IModelAdaptor
जो भी संकलित प्रकार का प्रतिनिधित्व करने के लिए dynamic
है, और इसका उपयोग करके पंजीकरण करें TemplateGroup.RegisterModelAdaptor
.
जवाब के लिए 0 № 2
पर प्रेरित किया श्री हरवेल का जवाब, मैंने "ए लागू किया है IModelAdaptor
जो न्यूटनसॉफ्ट के उपयोग को सक्षम करता है। जसन वस्तुओं को पार्स करता है।
ये रहा:
internal class JTokenModelAdaptor : Antlr4.StringTemplate.IModelAdaptor
{
public object GetProperty(
Antlr4.StringTemplate.Interpreter interpreter,
Antlr4.StringTemplate.TemplateFrame frame,
object obj,
object property,
string propertyName)
{
var token = (obj as JToken)?.SelectToken(propertyName);
if (token == null)
return null;
if (token is JValue)
{
var jval = token as JValue;
return jval.Value;
}
return token;
}
}
आपको बस अपने टेम्पलेट समूह में एडॉप्टर को पंजीकृत करना होगा, जैसे:
template.Group.RegisterModelAdaptor(typeof(JToken), new JTokenModelAdaptor());