繁体   English   中英

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

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

为简单起见,我制作了非常简单的结构。

传入JSON:

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

我需要与我的Person类的强类型对象集成:

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

首先创建Person对象(实际上是从DB创建的,但在这里我将对其进行硬编码):

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

如何将jsonInput集成(合并)到person中以具有完整的Person对象。 JSON数据只应为匹配的属性覆盖Person对象

因此,我首先将JSON jsonInput反序列化为动态对象

var obj = JsonConvert.DeserializeObject(jsonInput);

所以,现在我已经部分填充了obj对象(类型为JObject )和部分填充了person对象(类型为Person )。

如何在一个命令中将它们合并为person对象。 也许还有另一种方法将jsonInput直接反序列化为person

结果应为:

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

我要避免的是遍历属性。 感谢您的任何建议。

使用PopulateObject方法

JsonConvert.PopulateObject(jsonInput,person);

假设您将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; }         
}

尚未测试,但希望能有所帮助

暂无
暂无

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

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