简体   繁体   English

如何将JObject复制到强类型对象中?

[英]How to copy JObject into strongly-typed object?

for simplicity I made very simple structures. 为简单起见,我制作了非常简单的结构。

Incoming JSON: 传入JSON:

jsonInput = "{ 'FNAME': 'John'; 'LNAME': 'Doe', 'CITY': 'Vancuver'}";

I need to integrate with my strongly typed object of class Person: 我需要与我的Person类的强类型对象集成:

class Person
{
    public string FNAME { get; set; }
    public string LNAME { get; set; }
    public string CITY { get; set; }
    public string COUNTRY { get; set; }
}

Person object gets created first (in real life from DB, but here I will just hard-code it): 首先创建Person对象(实际上是从DB创建的,但在这里我将对其进行硬编码):

var person = new Person { CITY = 'Toronto', COUNTRY = 'Canada'};

How to integrate (merge) jsonInput into person to have complete Person object. 如何将jsonInput集成(合并)到person中以具有完整的Person对象。 JSON data is supposed to override Person object only for matched properties JSON数据只应为匹配的属性覆盖Person对象

So, I de-serialize JSON jsonInput first into dynamic object 因此,我首先将JSON jsonInput反序列化为动态对象

var obj = JsonConvert.DeserializeObject(jsonInput);

So, now I have partially populated obj object (that is of type JObject ) and partially populated person object (of type Person ). 所以,现在我已经部分填充了obj对象(类型为JObject )和部分填充了person对象(类型为Person )。

How, in a single command I can merge them into person object. 如何在一个命令中将它们合并为person对象。 Or maybe there is another way to deserialize jsonInput directly into person ?? 也许还有另一种方法将jsonInput直接反序列化为person

The result should be: 结果应为:

person.FNAME = 'John'
person.LNAME = 'Doe'
person.CITY = 'Vancuver'
person.COUNTRY = 'CANADA'

What I want to avoid is looping through properties. 我要避免的是遍历属性。 Thanks for any advice. 感谢您的任何建议。

使用PopulateObject方法

JsonConvert.PopulateObject(jsonInput,person);

assuming you recive json as a parameter ... 假设您将json作为参数接收...

jsonInput = "{ 
              'PERSON' : {
                         'FNAME': 'John'; 
                         'LNAME': 'Doe', 
                         'CITY': 'Vancuver'
                        } 
             }";
Public class Person{
     public Person(string json,string city,string country){
            JObject jObject = JObject.Parse(json);
            JToken jPerson = jObject["PERSON"];
            FNAME= (string) jPerson ["FNAME"];
            LNAME= (string) jPerson ["LNAME"];

            COUNTRY = country:
            CITY= ((string) jPerson ["CITY"] == string.Empty)?city:(string) jPerson ["CITY"]; //IF CITY PROPERTY EMPTY USE CITY ELSE USE JSON PROPERTY

         }  
           public string FNAME{ get; set; }
           public string LNAME{ get; set; }
           public string CITY{ get; set; }
           public string COUNTRY{ get; set; }         
}

not tested but hope that helps 尚未测试,但希望能有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM